2017-04-04 26 views
0

我正在編寫一個bash腳本,用於檢查目錄中文件的數量,如果超過了某個數字,請執行某些操作。該代碼是在這裏:Bash錯誤:在使用目錄路徑時發生零錯誤時發生分區

DIR=/home/inventory 
waiting="$((ls ${DIR}/waiting/ -1 | wc -l))" 

echo $waiting 

if [ $waiting -gt 3 ] 
    then 
    (DO SOME STUFF HERE) 
fi 

我得到的錯誤是這行....

waiting="$((ls ${DIR}/waiting/ -1 | wc -l))" 

具體的錯誤是....

division by 0 (error token is "/home/inventory/waiting/ -1 | wc -l") 

我心裏想把這個目錄中的文件數放到一個變量中可以使用$(())。

有沒有人有一個想法,爲什麼這是失敗? 許多TIA ..... 簡

回答

2

使用單括號:

waiting="$(ls ${DIR}/waiting/ -1 | wc -l)" 

$((...))用於執行算術計算。

從手冊頁:不建議使用的ls輸出來計數子-directory的文件/目錄號爲文件名可能包含新行或水珠字符以及

((expression))

The expression is evaluated according to the rules described below under ARITHMETIC EVALUATION. If the value of the expression is non-zero, the return status is 0; otherwise the return status is 1. This is exactly equivalent to let "expression".

+0

像一個冠軍! –

0

這裏是安全使用gnu find這樣做的一個例子:

dir=/home/inventory 
waiting=$(find "$dir" -mindepth 1 -maxdepth 1 -printf '.' | wc -c) 

如果沒有gnu find不要再使用:

waiting=$(find "$dir" -mindepth 1 -maxdepth 1 -exec printf '.' \; | wc -c) 
0

另一種方法是通過管道向AWK等待變量檢查一個大於3的值:

DIR =/home/inventory waiting =「$((ls $ {DIR}/waiting/-1 | WC -1))」

回聲$等待

解析度= $(回聲$等待| AWK '{如果($ 0> 3)打印 「OK」}')

如果[$解析度= =「OK」] 然後 (在這裏做的一些東西) fi