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 ]
在循环到达目录时实际上执行 return 0,因此应该调用 && continue
。那么,为什么程序继续循环代码的其余部分并尝试对目录进行 grep,而不是像预期的那样在 continue 处跳过循环迭代?我知道这很微不足道,但想知道这里发生了什么。
输出文本
模式匹配退休
文件大小为 396
到目前为止的大小是 6385 字节
在 sum_files
中匹配的模式
文件大小为 398
到目前为止的大小是 6783 字节
在 tp0 中匹配的模式
文件大小为 164
到目前为止的大小是 6947 字节
continue
继续循环,好像已经到达底部。
要跳出循环,请使用 break
。
更多关于 bash 脚本的信息:http://tldp.org/LDP/abs/html/index.html
关于您关于空目录如何具有大小的问题:
目录在技术上只是文件本身,为了将自己建立为目录,它们需要一些数据让文件系统知道这一点。
我正在按照一系列教程学习 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 ]
在循环到达目录时实际上执行 return 0,因此应该调用 && continue
。那么,为什么程序继续循环代码的其余部分并尝试对目录进行 grep,而不是像预期的那样在 continue 处跳过循环迭代?我知道这很微不足道,但想知道这里发生了什么。
输出文本
模式匹配退休
文件大小为 396
到目前为止的大小是 6385 字节
在 sum_files
中匹配的模式
文件大小为 398
到目前为止的大小是 6783 字节
在 tp0 中匹配的模式
文件大小为 164
到目前为止的大小是 6947 字节
continue
继续循环,好像已经到达底部。
要跳出循环,请使用 break
。
更多关于 bash 脚本的信息:http://tldp.org/LDP/abs/html/index.html
关于您关于空目录如何具有大小的问题:
目录在技术上只是文件本身,为了将自己建立为目录,它们需要一些数据让文件系统知道这一点。