第3章 shell结构化命令------------(while、until循环,九九乘法表)

时间:2021-10-17 20:30:48

3.5 while、until命令

         while命令允许定义要测试的命令,然后只要定义的测试命令返回0退出状态代码。它在每次迭代开始时检查测试命令。测试命令返回非零退出状态代码时,while命令停止执行命令集。

3.5.1 使用多条测试命令

         while命令的格式是:

         第3章 shell结构化命令------------(while、until循环,九九乘法表)

         在while命令中定义的test命令与在if-then语句中定义的格式一样。while命令的关键是指定的test命令的退出状态必须根据循环中命令的运行情况改变。如果退出状态不改变,while循环就会陷入无限的循环中。只要测试条件为true,while命令会继续循环定义的命令。在这些命令中,用于检测条件的变量一定要改变,否则就会无穷循环。

         while命令允许在while语句定义多条test命令。只有最后一条测试命令的退出状态是用来决定循环是何时停止的。在多命令while语句中,所有的测试命令在每次迭代中都执行,包含测试命令失败的最后一次迭代。

                第一条测试命令简单的显示了变了$result的当前值。第二条命令使用测试命令决定变了$test的值。当变量$test的值等于零时,while循环执行echo语句。接下来,用于下一次迭代的测试条件被执行。执行echo测试命令,显示变量test的值,它现在小于零。直到shell执行test测试命令,while循环才终止。这表明,在多命令while语句中,所有的测试命令在每次迭代中执行,包含测试命令失败的最后一次迭代。

#!/bin/bash
#while命令测试实例
test=10
result=1
while echo $result
[ $test -gt 0 ]
do
result=$[ $result*$test ]
test=$[ $test-1 ]
done
echo "10的阶乘"$result
第3章 shell结构化命令------------(while、until循环,九九乘法表)

3.5.2until命令与循环嵌套

         until命令刚好与while命令相反。until命令需要制定一条测试命令,这条命令通常产生一个非0的退出状态。只要测试命令的退出状态非0,bash shell就会执行列在循环当中的命令。一旦测试条件返回0退出状态,循环停止。until命令格式如下:

            第3章 shell结构化命令------------(while、until循环,九九乘法表)

         与while命令相似,可以在until命令语句中使用多条测试命令。只有最后一条命令的退出状态能够决定bash shell是否执行其他定义的命令。            

#!/bin/bash
#until命令测试实例如下
var=10
result=1
until echo $var,$result
[ $var -le 0 ]
do
result=$[ $result*$var ]
var=$[ $var -1 ]
done
echo "10的阶乘"$result
第3章 shell结构化命令------------(while、until循环,九九乘法表) 

         一条循环语句可以在循环中使用任何类型的命令,包括其他循环命令。这种称为嵌套循环。使用嵌套循环时要谨慎,因为是在一个迭代内部执行另一个迭代,它增加了正在运行的命令的运行次数。

         嵌套循环(也称为内循环)对每次外部循环迭代都迭代所有的值。注意,两个循环的do命令和done命令之间没区别。嵌套循环实例:          

#!/bin/bash
#for嵌套for循环
#9*9乘法口诀
for(( i=1 ;i<=9;i++ ))
do
for(( j=1;j<=9;j++ ))
do
#当$j小于等于$i,在屏幕上打印乘法表
[ $j -le $i ] && echo -n "$i*$j=$[ $i * $j ] "
done
echo ''
done
第3章 shell结构化命令------------(while、until循环,九九乘法表)