Bash错误:使用目录路径

时间:2017-04-04 20:41:50

标签: bash variables scripting

我正在编写一个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 ..... 简

3 个答案:

答案 0 :(得分:2)

使用单括号:

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

$(( ... ))用于执行算术运算。

从手册页:

  

((expression))

     

根据ARITHMETIC EVALUATION下面描述的规则评估表达式。如果表达式的值不为零,则返回状态为0;否则返回状态为1.这与let"表达"。

完全相同

答案 1 :(得分:0)

建议不要使用ls的输出来计算子目录中的文件/目录数,因为文件名也可能包含换行符或整数字符。

以下是使用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)

答案 2 :(得分:0)

另一种方法是通过awk管道等待变量来检查大于3的值,所以:

DIR = /家庭/库存 waiting =“$((ls $ {DIR} / waiting / -1 | wc -l))”

echo $ waiting

res = $(echo $ waiting | awk'{if($ 0> 3)print“OK”}')

如果[$ res ==“OK”]    然后      (这里有点儿) 网络