Bash while 循环系统
循环是编程语言的基本概念之一。当你想多次运行一系列命令直到满足一个特定条件时,循环就很方便。
在Bash这样的脚本语言中, 循环对于重复性任务的自动化非常有用。在Bash脚本中,有三种基本的循环结构:for
loop ,while
loop,以及until
loop 。
本教程包括Bash中while
循环的基础知识。我们还将告诉你如何使用break
和continue
语句来改变循环的流程。
Bash while
循环
只要给定的条件评估为 "真",while
循环就会被用来执行一组未知次数的命令。
Bash while
循环的形式如下。
while [CONDITION]
do
[COMMANDS]
done
while
语句是以while
关键字开始的,后面是条件表达式。
在执行命令之前,要对条件进行评估。如果条件评估为真,命令就被执行。否则,如果条件评估为假,循环就会终止,程序控制将被传递给后面的命令。
在下面的例子中,在每一次迭代中,变量i
的当前值被打印出来,并且递增一个。
i=0
while [ $i -le 2 ]
do
echo Number: $i
((i++))
done
只要i
小于或等于2,循环就会迭代。它将产生以下输出:
输出
Number: 0
Number: 1
Number: 2
无限 while
循环
无限循环是一个无限重复且永不终止的循环。如果条件总是评估为真,你就得到一个无限循环。
在下面的例子中,我们使用内置命令:
来创建一个无限循环。:
总是返回真。你也可以使用内置的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
选项,以防止反斜线作为转义字符。
默认情况下,read
命令会修剪前导/后导的空白字符(空格和制表符)。在read
之前使用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!
总结
只要一个条件为真,while
循环就会重复执行一组给定的命令。
如果你有任何问题或反馈意见,请随时留言。