繁体   English   中英

Bash脚本继续关键字不破坏循环迭代

[英]Bash script continue keyword not breaking loop iteration

我正在学习一系列教程来学习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 ] [ ! -f $file ]实际上在循环到达目录时返回0,因此应该调用&& continue 那么为什么程序继续使用其余的循环代码并尝试grep目录而不是仅按预期跳过循环迭代? 我知道这是微不足道的,但想知道这里发生了什么。

输出文字

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

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

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

continue循环,就像它到达底部一样。

要打破循环使用break

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

至于你关于空目录如何具有大小的问题:目录技术上只是文件本身,并且为了将自己建立为目录,他们需要一些数据让文件系统知道。

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM