2017-04-04 13 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 

私は取得していますエラーは、具体的にエラーが....

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

である私がしようと思った

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

....このラインでありますこのディレクトリにあるファイルの数を$(())を使って動作する変数に入れてください。

これはなぜ失敗しているのでしょうか? 多くのTIA ..... ジェーン

答えて

2

使用単一括弧:

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

$((...))は、算術計算を実行するために使用されます。

manページから:

((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

ファイル名が同様に改行やグロブ文字を含むこととしてサブ-directory内のファイル/ディレクトリ数をカウントするlsの出力を使用することは推奨されません。あなたはgnu findその後、使用していない場合

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

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

別の方法としては、にawkを経由パイプに待機している変数です。ここ

は安全にgnu findを使用してそれを行うの一例であり、

DIR =/home/inventory waiting = "$((ls $ {DIR}/waiting/-1)"という値をチェックしてください。 [$ RES =場合)

|トイレ-l))」のawk '{OK "であれば($ 0> 3)印刷}

RES = $を($待っエコー待っ$エコー"' = "OK"] 次に (ここにいくつかあります) fi