在Shell脚本编程中,循环语句是必不可少的组成部分,它们允许我们重复执行某段代码直到满足特定条件。本文将详细介绍两种主要的循环结构:`while`循环和`until`循环。
### 一、while循环
`while`循环在满足指定条件时持续执行循环体内的命令。它的基本语法结构如下:
```bash
while condition
do
command1
command2
...
commandN
done
```
在这里,`condition`是测试条件,如果条件为真(非零),则执行循环体中的命令。一旦条件变为假(零),循环就会终止。下面是一个简单的例子,循环会在`COUNTER`小于5时继续,每次循环`COUNTER`自增1:
```bash
COUNTER=0
while [ $COUNTER -lt 5 ]
do
COUNTER=$((COUNTER + 1))
echo $COUNTER
done
```
运行这段脚本,将依次输出1到5。
`while`循环还可以用来从标准输入(如键盘)读取数据,直到遇到特定的终止信号,例如按下`Ctrl-D`(EOF)。以下示例展示了如何读取用户输入的最喜爱电影,直到用户按下`Ctrl-D`:
```bash
echo 'type <CTRL-D> to terminate'
echo -n 'enter your most liked film: '
while read FILM
do
echo "Yeah! great film the $FILM"
done
```
在这个例子中,用户输入的电影名会被赋值给变量`FILM`,并打印出相应的消息,直到用户按下`Ctrl-D`,循环结束。
### 二、until循环
`until`循环与`while`循环类似,但其逻辑正好相反。`until`循环会一直执行循环体内的命令,直到条件变为真为止。其语法结构如下:
```bash
until condition
do
command1
command2
...
commandN
done
```
由于测试条件在循环体结束时进行,所以`until`循环至少会执行一次。在某些情况下,当需要确保循环至少执行一次时,`until`循环可能会更合适。下面是一个简单的`until`循环例子,它会在`COUNTER`不小于5时结束:
```bash
COUNTER=0
until [ $COUNTER -ge 5 ]
do
COUNTER=$((COUNTER + 1))
echo $COUNTER
done
```
这个循环会从0开始,输出1到5。
虽然`while`循环通常比`until`循环更为常见,但在某些特定场景,如处理错误检查或者确保至少执行一次的场景,`until`循环可能更具优势。
### 结论
`while`循环和`until`循环都是Shell脚本中的重要控制流工具。选择哪种循环取决于你需要何时停止循环,以及你的条件测试方式。理解这两种循环的工作原理和用法,能够帮助编写更灵活、更高效的脚本。在编写涉及重复执行任务的脚本时,正确地利用它们可以极大地提高代码的可读性和实用性。