Bash错误:使用目录路径时出现零除法错误

Bash错误:使用目录路径时出现零除法错误,bash,variables,scripting,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))" 具体来

我正在编写一个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")
我认为尝试使用$(())将此目录中的文件数放入变量会起作用

有人知道为什么会失败吗? 许多人。。。。。
Jane

使用单括号:

waiting="$(ls ${DIR}/waiting/ -1 | wc -l)"
$(…)
用于执行算术计算

从手册页:

((表达式))

表达式将根据下面“算术求值”下描述的规则求值。如果表达式的值为非零,则返回状态为0;否则返回状态为1。这完全等同于let“表达式”


使用单括号:

waiting="$(ls ${DIR}/waiting/ -1 | wc -l)"
$(…)
用于执行算术计算

从手册页:

((表达式))

表达式将根据下面“算术求值”下描述的规则求值。如果表达式的值为非零,则返回状态为0;否则返回状态为1。这完全等同于let“表达式”


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

下面是一个使用
gnu-find
安全操作的示例:

dir=/home/inventory
waiting=$(find "$dir" -mindepth 1 -maxdepth 1 -printf '.' | wc -c)
如果您没有
gnu查找
,请使用:

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

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

下面是一个使用
gnu-find
安全操作的示例:

dir=/home/inventory
waiting=$(find "$dir" -mindepth 1 -maxdepth 1 -printf '.' | wc -c)
如果您没有
gnu查找
,请使用:

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

另一种选择是通过awk管道传输等待变量,以检查值是否大于3,因此:

目录=/home/inventory waiting=“$((ls${DIR}/waiting/-1|wc-l))”

echo$等待

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

如果[$res==“OK”] 然后 (在这里做一些事情)
fi

另一种替代方法是通过awk传递等待变量,以检查值是否大于3,因此:

目录=/home/inventory waiting=“$((ls${DIR}/waiting/-1|wc-l))”

echo$等待

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

如果[$res==“OK”] 然后 (在这里做一些事情)
fi

像冠军一样工作!像冠军一样工作!