我正在编写一个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 ..... 简
答案 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”] 然后 (这里有点儿) 网络