【发布时间】:2018-12-10 01:44:53
【问题描述】:
我正在编写一个简单的 bash 脚本来确定目录大小。我知道这很简单,只需使用du -sh directory_name。
我正在尝试学习如何使用 for 循环、while 循环和 if 语句来完成这项任务。这是我的代码:
#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
#for the directory, display the size in human readable format.
for $varDirectory
do
du -sh $varDirectory
done
}
它基本上要做的是检查目录的用户输入是否存在,如果不存在则显示它不存在。然后使用while循环检查大小是否大于1,并显示大于1。最后,使用for循环显示文件大小。
我收到一个错误:意外标记 `}' 附近的语法错误
更新
输出
Please enter a directory
/home/kayenine
./directory.sh: line 15: 298M: command not found
./directory.sh: line 20: 298M: command not found
./directory.sh: line 4: `$varDirectory': not a valid identifier
【问题讨论】:
-
你应该把它放在shellcheck.net,但你遇到的具体错误可能是因为最后一个
for循环没有done -
您还应该对
if [ ! -r "$varDirectory" ]进行第二次检查,因为无论您是否有权从该目录读取,该目录都会测试为真。确定它是否可读的第二次检查是谨慎的。 -
du -sh不会输出像298这样的简单值,它会输出298M <dir name>,因此您需要获取du以输出计划旧千字节。所以请改用du -k $varDirectory | cut -f1。因此,while 循环中条件的第二部分应该是[ $(du -sh "$varDirectory") -gt "$minimumsize" ]。注意[]'s。 -
您致电
du -sh $varDirectory多少次(超过一次)?你为什么要多次使用while而一个简单的if.. then .. else .. fi就可以了?
标签: bash function shell unix directory