2015-05-29 90 views
1

我意識到這可能是一個非常簡單的問題,但我無法弄清楚爲什麼這不起作用。我試圖檢查一個文件夾是否大於35GB,如果是,請刪除所有超過3天的文件。Bash條件語句

有了這個代碼:

#!/bin/bash 
MAX=35000000000 
if [ $(du -sb ~/MEGA | cut -f1) \> $MAX ] then 
    find ~/MEGA/* -mtime +3 -exec rm -fr {} \; 
fi 

,我發現了以下錯誤:

syntax error near unexpected token `fi' 
+1

看看http://www.shellcheck.net/ – Cyrus

+0

@Cyrus真棒! – codedude

回答

5

你缺少一個分號或then關鍵字前行跳躍。請注意,Bash使用>來比較字符串,而不是數字。對於數字比較,您應該使用-gt或Bash專用((算術表達式計算器。例如:

#!/bin/bash 
MAX=35000000000 
if (($(du -sb ~/MEGA | cut -f1) > $MAX)) 
then 
    find ~/MEGA/* -mtime +3 -exec rm -fr {} \; 
fi 

參考:Bash conditional constructs

+3

只是爲了澄清字符串與數字比較的區別:'[5 \> 35000000000]'會評估爲真,因爲「5」在「3」之後。 –

+0

雙括號也可以用於字符串嗎?還是隻有數字操作? – codedude

+1

僅對算術使用'(())'。對於字符串或其他一般情況,Bash有其特定的[[]]'測試運算符,它比傳統的[[]' – C2H5OH

1

變化if [ $(du -sb ~/MEGA | cut -f1) \> $MAX ] then

if (($(du -sb ~/MEGA | cut -f1) > MAX)); then 

if語句的格式:

if condition;then 
something 
fi 

或者

if condition 
then 
something 
fi 

或者

if condition;then something;fi 

注:

  1. 您可以合併多條線路之間使用;

  2. 您可以從$MAX$算術裏面的if語句

0

Bash錯誤消息有時會引起誤解。在那之前你忘了分號。

#!/bin/bash 
MAX=35000000000 
if [ $(du -sb ~/MEGA | cut -f1) -gt $MAX ]; then 
find ~/MEGA/* -mtime +3 -exec rm -fr {} \; 
fi