前言
while命令某种意义上是 if-then语句和for循环的混合体。while命令允许定义一个要测试的命令,然后在循环执行一组命令,只要定义的测试命令返回的是退出状态码0。它会在每次迭代的一开始测试test命令。在test命令返回非零退出状态码时,while命令会停止执行那组命令。
while 的基本格式
while命令的格式是:
while test command
do
other commands
done
从上面的格式上看,while命令中定义的test command 和 if-then语句中的格式一模一样。while命令的关键在于所指定的test command的退出状态码必须随着循环中运行的命令而改变。如果退出的状态码不改变,while循环将一直不停的进行下去。
最常见的test command的用法用方括号来检查循环命令中用到的shell变量的值,例如:
#! /bin/bash
#while command test
var1=10
while [ $var1 -gt 0 ]
do
echo "$var1"
var1=$[ $var1 -1 ]
done
输出结果:
while 命令的定义了每一次迭代时的检查的测试条件:
while [ $var1 -gt 0 ]
只要测试条件成立,while命令就会不停地循环执行定义好的命令。在这些命令中,测试条件中用到的变量必须修改,否则就会陷入无限的循环中。我们用shell算术来将变量减一:
var1=$[ $var1 -1 ]
while 循环会在测试条件不成立时停止。
C语言风格的 while循环的通用形式如下:
while (expression)
statement
statement部分可以是以分号结尾的简单语句,也可以是用花括号起来的复合语句。expression 部分都使用关系表达式。也就是说,expression是值之间的比较,可以使用任何表达式。如果expression为真,执行statement部分一次,然后再次判断expression。
#include <stdio.h>
int main(int agrc, char **argv)
{
int i = 10;
while (i > 0)
{
printf("%d\n",i);
i--;
}
return 0;
}
while 循环是使用入口条件循环。所谓 “有条件”指的是语句部分的执行取决于测试表达式描述的条件,例如:(i > 0)。该表达式是一个入口条件,因为满足条件才能进入循环体。
until命令
until命令和while命令工作的方式完全相反。until命令要求你的指定一个通常返回非零退出状态码的测试命令。只有测试命令的退出状态码不为0,bash shell才会执行循环中列出的命令。一旦测试命令返回了退出状态码0,循环就结束了。
until test commands
do
other commands
done
和while命令类似,你可以在until命令语句中放入多个测试命令。只有最后一个命令的退出状态码决定了bash shell是否执行了定义的other commands
until命令的例子:
#! /bin/bash
#using the until command
var1=100
until [ $var1 -eq 0 ]
do
echo "$var1"
var1=$[ $var1 -25 ]
done
输出结果:
本例中测试var1变量来决定until循环何时停止。只要该变量的值等于0,until命令就会停止循环。同while命令一样,在until命令中使用多个测试命令是要注意。
#! /bin/bash
#using the until command
var1=100
until echo "$var1"
[ $var1 -eq 0 ]
do
echo "Inside the loop: $var1"
var1=$[ $var1 -25 ]
done
输出结果:
总结
while命令使用普通命令或测试命令提供了基于命令条件的循环。until命令提供了迭代命令的一种方法,但它的迭代建立在命令产生非零退出的状态的基础上。
参考:Linux命令行与shell脚本编程大全