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

标签 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

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

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

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

输出文本

退休时匹配的模式
文件大小为 396
到目前为止的大小是 6385 字节

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

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

最佳答案

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

要跳出循环使用break

更多关于 bash 脚本的信息:http://tldp.org/LDP/abs/html/index.html

关于linux - Bash 脚本 continue 关键字不中断循环迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32680285/

相关文章:

Java 输入文件循环

linux - wso2-iot 服务没有 wso2server.sh

java - hadoop 命令如何与 javac 一起工作

database - 有没有免费的数据分析器可以帮助信息可视化?

linux - bash shell 脚本中的模函数

oracle - 在循环中创建 Oracle 表

linux - EXT4 是否已过时用于生产?

Linux/用宏替换旧字符串

linux - Bash 的段错误消息中的数字是什么意思?

c - 想知道何时使用 do while 循环与 while 相比(内部示例)