bash while循环
循环是编程语言的基本概念之一。
当我们要多次运行一系列命令直到满足特定条件时,循环很方便。
在Bash等脚本语言中,循环对于自动执行重复性任务很有用。
Bash脚本中有三种基本的循环构造,即'for'循环,'while'循环和'until'循环。
本教程介绍了Bash中“ while”循环的基础。
我们还将向我们展示如何使用“ break”和“ continue”语句来改变循环流程。
bash“ while”循环
只要给定条件的值为真,“ while”循环就可以执行给定命令集的次数未知。
Bash的“ while”循环采用以下形式:
while [CONDITION] do [COMMANDS] done
“ while”语句以“ while”关键字开头,后跟条件表达式。
在执行命令之前先评估条件。
如果条件评估为真,则执行命令。
否则,如果条件评估为假,则循环终止,程序控制将传递给随后的命令。
在下面的示例中,在每次迭代中,将打印变量'i'的当前值并将其递增1.
i=0 while [ $i -le 2 ] do echo Number: $i ((i++)) done
只要“ i”小于或者等于2,Tue循环就会迭代。
它将产生以下输出:
Number: 0 Number: 1 Number: 2
无限的“ while”循环
无限循环是无限重复且永不终止的循环。
如果条件始终为真,则将出现无限循环。
在下面的示例中,我们使用内置命令':'创建无限循环。
':'始终返回true。
我们还可以使用内置的“ true”或者任何其他始终返回true的语句。
while : do echo "Press <CTRL+C> to exit." sleep 1 done
上面的“ while”循环将无限期运行。
我们可以通过按“ CTRL + C”来终止循环。
这是单行等效项:
while :; do echo 'Press <CTRL+C> to exit.'; sleep 1; done
逐行读取文件
“ while”循环最常见的用法之一是逐行读取文件,数据流或者变量。
这是一个示例,它逐行读取'/etc/passwd'文件并打印每一行:
file=/etc/passwd while read -r line; do echo $line done < "$file"
我们没有使用条件控制'while'循环,而是使用输入重定向('<“ $file”')将文件传递给控制循环的'read'命令。
“ while”循环将一直运行到读取最后一行为止。
逐行读取文件时,请始终将'read'与'-r'方法一起使用,以防止反斜杠充当转义符。
默认情况下,“读取”命令会修剪前导/尾随空格字符(空格和制表符)。
在“读取”之前使用“ IFS =”选项可防止此行为:
file=/etc/passwd while IFS= read -r line; do echo $line done < "$file"
“break”和“continue”语句
'break'和'continue'语句可用于控制while循环的执行。
“break”语句
“ break”语句终止当前循环,并将程序控制权传递给终止循环之后的命令。
当满足特定条件时,通常用于终止循环。
在以下示例中,一旦当前迭代项等于'2',循环的执行将被中断。
i=0 while [ $i -lt 5 ] do echo "Number: $i" ((i++)) if [[ "$i" == '2' ]]; then break fi done echo 'All Done!'
Number: 0 Number: 1 All Done!
“continue”语句
'continue'语句退出循环的当前迭代,并将程序控制传递给循环的下一个迭代。
在下面的代码中,一旦当前迭代的项目等于“ 2”,则“ continue”语句将使执行返回到循环的开始并继续下一次迭代。
i=0 while [ $i -lt 5 ] do ((i++)) if [[ "$i" == '2' ]]; then continue fi echo "Number: $i" done echo 'All Done!'
Number: 1 Number: 3 Number: 4 Number: 5 All Done!