我正在学习一系列教程来学习Bash shell脚本。其中一个练习是遍历当前目录中的文件并在这些文件中搜索模式。如果找到模式,那么脚本应该总结这些文件的文件大小。
#!/bin/sh
patern=echo
totalSize=0
for file in *
do
[ ! -f $file ] && continue
if grep $patern $file > /dev/null
then
echo "pattern matched in $file"
echo "file size is `stat -c%s $file`"
fileSize=`stat -c%s $file`
totalSize=`expr $totalSize + $fileSize`
echo "size so far is $totalSize bytes"
echo
fi
done
我在运行脚本的目录中有另一个文件夹。该文件夹名为" somedir"。它是空的。我已经在下面粘贴了一段输出文本。中间3行显示循环遍历目录" somedir"它打印为" sum_files" - 我的脚本名称和文件大小。
我不明白这种行为。空目录如何具有文件大小?
但我主要担心的是为什么continue关键字不会停止循环迭代。输出显示脚本正在运行包含grep命令的if语句,即使找到目录也应该停止。
我已经验证,当循环到达目录时,测试命令[ ! -f $file ]
实际上返回0,因此应该调用&& continue
。那么为什么程序继续使用其余的循环代码并尝试grep目录而不是仅按预期跳过循环迭代?我知道这是微不足道的,但想知道这里发生了什么。
退休时匹配的模式
文件大小为396
到目前为止的大小是6385字节
sum_files中匹配的模式
文件大小为398
到目前为止的大小是6783字节
tp0中匹配的模式
文件大小为164
到目前为止的大小是6947字节
答案 0 :(得分:6)