Bash脚本的continue关键字不中断循环迭代

Dro*_*rok 4 linux bash loops continue

我正在遵循一系列教程来学习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
Run Code Online (Sandbox Code Playgroud)

我正在从中运行脚本的目录中还有另一个文件夹。该文件夹称为“ somedir”。它是空的。我在下面粘贴了一段输出文本。中间的三行显示了循环何时遍历目录“ somedir”,该目录打印为“ sum_files”-我的脚本名称以及文件大小。

我不了解这种行为。空目录如何具有文件大小?
但是我主要关心的是为什么continue关键字没有停止循环迭代。输出显示该脚本正在运行以下包含grep命令的if语句,即使该脚本在找到目录后也应停止。

我已经验证,[ ! -f $file ]当循环到达目录时,test命令实际上确实返回0,因此&& continue应调用。那么,为什么程序要继续循环代码的其余部分,并尝试grep目录,而不是像预期的那样只是跳过continue的循环迭代?我知道这很简单,但想知道这里发生了什么。

输出文字

淘汰
文件中匹配的模式大小为396
,到目前为止为6385字节

sum_files中匹配的模式
文件大小为398
,到目前为止为6783字节

tp0
文件中匹配的模式大小为164
,到目前为止为6947字节

alk*_*alk 7

continue 继续循环,就好像到达了底部。

要打破循环,请使用break

有关bash脚本的更多信息,请访问:http : //tldp.org/LDP/abs/html/index.html