我想编写一个 shell 脚本来统计目录中的文件、目录和临时文件的数量。下面的脚本会抛出错误。
#!/bin/bash
cd '/home/Ubuntulover/Shell'
file=0
dir=0
temp=0
for d in *;
do
for f in *;
do
if [ -d "$d" ]; then
dir=$((dir+1))
elif [ -f "$f" ]; then
file=$((file+1))
else
temp=$((temp+1))
fi
done
echo "Files $file"
echo "Directories $dir"
echo "Temporaryfiles $temp"
答案1
您有太多for
语句:就目前情况而言,有一个循环变量 d 计数目录中的所有项目,第二个循环变量 f 对每个存在的文件再次执行此操作 - 因此,如果您有 4 个文件,那么您将获得 4*4=16 次迭代(或者如果 是done
正确的话)。
您可以使用类似的语句ls -l | wc -l
来快速检查大致数字是否正确。
我认为这更符合你的要求:
#!/bin/bash
cd '/home/Ubuntulover/Shell'
file=0
dir=0
temp=0
for d in *;
do
if [ -d "$d" ]; then
dir=$((dir+1))
elif [ -f "$d" ]; then
file=$((file+1))
else
temp=$((temp+1))
fi
done
echo "Files $file"
echo "Directories $dir"
echo "Temporaryfiles $temp"
答案2
您有语法错误,因为最上面的循环done
中缺少关键字:for
#!/bin/bash
cd '/home/479153/Temp' || exit
file=0
dir=0
temp=0
for d in *;
do
for f in *; # this loop actually not needed
do
if [ -d "$d" ]; then
dir=$((dir+1))
elif [ -f "$f" ]; then # can be replace as $d
file=$((file+1))
else
temp=$((temp+1))
fi
done
done
echo "Files $file"
echo "Directories $dir"
echo "Temporaryfiles $temp"
您可以随时使用http://www.shellcheck.net/网站来检查你的 bash 代码中的语法错误。