Bash错误:使用目录路径时出现零除法错误
我正在编写一个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))" 具体来
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像冠军一样工作!像冠军一样工作!