📅  最后修改于: 2023-12-03 14:59:28.436000             🧑  作者: Mango
在Bash中,while循环是一种基本的控制结构,它允许我们重复执行代码块,直到满足某个条件才退出循环。在本文中,我们将会介绍如何编写while循环,及其各种使用方法。
基本while循环的语法如下:
while [ condition ]
do
command1
command2
done
括号里的condition是在每次循环开始前执行的测试条件。如果测试结果为true,则执行do和done之间的命令。
例如:
#!/bin/bash
count=1
while [ $count -le 5 ]
do
echo "Count is $count"
let count+=1
done
echo "Finished"
在这个例子中,我们定义了变量count的初始值为1。然后在while循环中,我们测试了变量count是否小于或等于5。只要条件为真,我们就将“Count is”和变量count打印到终端,并将count的值增加1。在count大于5时,循环结束并输出“Finished”。
无限循环是一种特殊类型的while循环。它是无限循环的,直到人为干预才会停止。下面是无限循环的语法:
while true
do
command1
command2
done
或者
while :
do
command1
command2
done
例如:
#!/bin/bash
while :
do
echo "Press CTRL+C to stop the script"
sleep 1
done
在这个例子中,我们使用while true或while :来定义一个无限循环,并将“Press CTRL+C to stop the script”消息输出到终端。我们使用sleep命令来暂停1秒,使循环在每次迭代之间暂停一秒钟。
Ctrl-C是用来停止脚本的通用方法。我们也可以使用其他方法停止脚本,例如在另一个终端中杀掉脚本。
until循环与while循环相似,但是只有在测试条件为false时才会执行循环中的代码。它的语法与while循环很相似:
until [ condition ]
do
command1
command2
done
例如:
#!/bin/bash
count=10
until [ $count -lt 1 ]
do
echo $count
let count-=1
done
echo "Finished"
在这个例子中,我们定义了count变量的初始值为10,并在循环开头测试了count是否小于1。由于这是错误的,所以循环会一直运行,直到count小于1。在每次循环中,我们都将count的值打印到终端,并将count减1。当count小于1时,循环结束并输出“Finished”。
在循环结束之前,我们还可以使用break和continue语句来控制循环。
break语句用于立即停止循环,并退出循环。在while或until循环中,break会立即停止循环,并跳到done或until之后的下一条语句。
例如:
#!/bin/bash
count=1
while [ $count -le 5 ]
do
echo "Count is $count"
let count+=1
if [ $count -eq 3 ]
then
break
fi
done
echo "Finished"
在这个例子中,我们定义了变量count的初始值为1,并在循环每次迭代之前检查其值是否小于或等于5。如果条件是真的,我们就打印出“Count is”和count的当前值。在每次迭代中,我们都将count的值增加1。当变量count的值等于3时,我们使用break语句来立即退出循环。因此,在最后一次循环迭代之后,打印了“Finished”。
continue语句用于跳过当前迭代的代码,并继续下一次迭代。在while或until循环中,continue会立即停止当前迭代,并返回循环的开头。
例如:
#!/bin/bash
count=1
while [ $count -le 5 ]
do
if [ $count -eq 3 ]
then
let count+=1
continue
fi
echo "Count is $count"
let count+=1
done
echo "Finished"
在这个例子中,我们定义了变量count的初始值为1,并在循环每次迭代之前检查其值是否小于或等于5。如果条件是真的,我们就打印出“Count is”和count的当前值。在每次迭代中,我们都将count的值增加1。当变量count的值等于3时,我们使用continue语句来跳过此次迭代。因此,在第三次迭代中,由于count等于3,我们省略了打印的消息。然后我们继续执行循环,并在计数变量增加到5时停止。
下面是一个演示如何使用while循环来读取文件行的脚本示例:
#!/bin/bash
filename=$1
while read line
do
echo "$line"
done < $filename
在这个例子中,我们将$filename的值作为命令行参数传递给脚本。我们使用while read循环来读取文件中的每一行,并将其打印到终端。
在do和done之间的是要重复执行的代码块。read命令用于从文件中读取下一行。当文件到达末尾时,read命令将返回非零退出代码,并退出循环。
<操作符用于将文件的内容重定向到循环中的read命令。因此,每次迭代都会从文件中读取下一行。