Unix Bash脚本-未找到命令
因此,我正在研究一个简单的目录大小函数,它假设接收目录的输入,并告诉您它的大小,以及它是大于还是小于1KB。我以前收到过帮助,但是在修改代码后,我得到一个错误,说找不到命令。这没有意义,因为命令语法非常好Unix Bash脚本-未找到命令,bash,function,shell,unix,directory,Bash,Function,Shell,Unix,Directory,因此,我正在研究一个简单的目录大小函数,它假设接收目录的输入,并告诉您它的大小,以及它是大于还是小于1KB。我以前收到过帮助,但是在修改代码后,我得到一个错误,说找不到命令。这没有意义,因为命令语法非常好 #!/bin/bash # GNU bash, version 4.3.46 function checkSize(){ #while the directory exists and size is greater than 1 while [ -
#!/bin/bash
# GNU bash, version 4.3.46
function checkSize(){
#while the directory exists and size is greater than 1
while [ -d "$varDirectory" ] && $(du -sh $varDirectory) -gt "$minimumsize"
do
echo "$varDirectory is greater then 1kb"
done
#while the directory size is less than 1
while [ -d "$varDirectory" ] && $(du -sh $varDirectory) -lt "$minimumsize"
do
echo "$varDirectory is less than 1kb"
exit
done
}
在输入目录后,我得到以下错误
./testing.sh: line 19: 299M: command not found
./testing.sh: line 24: 299M: command not found
此错误适用于以下行
while [ -d "$varDirectory" ] && $(du -sh $varDirectory) -gt "$minimumsize"
while [ -d "$varDirectory" ] && $(du -sh $varDirectory) -lt "$minimumsize"
语法是正确的,但它会抛出该错误
语法是正确的,但它会抛出该错误
不,语法不正确。使用$(du-sh$varDirectory)-gt“$minimumsize”
运行命令du-sh$varDirectory
,然后获取其输出并再次将输出作为命令运行。在您的例子中,输出以299M
开始,因此bash抱怨它找不到299M
-命令
你可能想写
if [ -d "$varDirectory" ] &&
[ $(du -s "$varDirectory" | cut -f1) -gt "$minimumsize" ]
then
echo "greater than $minimumsize"
else
echo "less than or equal $minimumsize or not a directory"
fi
请注意,您只能比较数字。但是,du-sh
的输出不是一个数字,它类似于299m目录
。禁用人类可读格式以删除k
,m
,g
。。。后缀,然后使用cut-f1
仅提取数字
此外,您不需要循环<代码>同时重复<代码>如果只运行一次。使用if
还可以使用else
分支
语法是正确的,但它会抛出该错误
不,语法不正确。使用$(du-sh$varDirectory)-gt“$minimumsize”
运行命令du-sh$varDirectory
,然后获取其输出并再次将输出作为命令运行。在您的例子中,输出以299M
开始,因此bash抱怨它找不到299M
-命令
你可能想写
if [ -d "$varDirectory" ] &&
[ $(du -s "$varDirectory" | cut -f1) -gt "$minimumsize" ]
then
echo "greater than $minimumsize"
else
echo "less than or equal $minimumsize or not a directory"
fi
请注意,您只能比较数字。但是,du-sh
的输出不是一个数字,它类似于299m目录
。禁用人类可读格式以删除k
,m
,g
。。。后缀,然后使用cut-f1
仅提取数字
此外,您不需要循环<代码>同时重复<代码>如果只运行一次。使用if
还可以使用else
分支。试试
while [ -d "$varDirectory" ] && [ $(du -s $varDirectory|cut -f 1) -gt "$minimumsize" ]
我建议省略-h
(=“人类可读”)选项du
,因为像299M
这样的字符串很难比较。试试看
while [ -d "$varDirectory" ] && [ $(du -s $varDirectory|cut -f 1) -gt "$minimumsize" ]
我建议省略
-h
(=“人类可读”)选项du
,因为像299M
这样的字符串很难比较。噢,snap,我没有注意到,这修复了我的错误,谢谢。只是一个简单的问题,你知道为什么它总是告诉我,即使目录大小为299m,它的输出值也小于1吗?@Kayenine请看Bodo的答案。我假设-gt
是du
命令的一部分,但显然您想在[…-gt…]
内部使用du
的输出。噢,快照,我没有注意到,这修复了我的错误,谢谢。只是一个简单的问题,你知道为什么它总是告诉我,即使目录大小为299m,它的输出值也小于1吗?@Kayenine请看Bodo的答案。我假设-gt
是du
命令的一部分,但显然您希望在[…-gt…]
内部使用du
的输出。这会引发此错误,[:太多了arguments@Kayenine:你说得对。我忘了从du
输出中删除目录名。我编辑了我的答案。这会引发此错误,[:太多arguments@Kayenine:你说得对。我忘了从du
输出中删除目录名。我编辑了我的答案。另请参见,(U&L.SE),(SO),(AskU),等等。另见,(U&L.SE),(SO),(AskU)等。