Shell 的 until 循环跟 while 循环正好相反,while 循环是当条件成立时,一直执行循环里的逻辑,而 until 循环是当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环。
until 的使用场景很少,一般使用 while 即可。
until condition do statements done
参数 | 描述 |
---|---|
until | until 循环使用的关键字。 |
condition | until 循环的条件,如果为假,则一直执行 until 循环。 |
do | until 循环使用的关键字。 |
statements | until 循环的条件不满足时,执行的代码块。 |
done | until 循环使用的关键字。 |
当 condition 条件为假时,一直执行缩进里面的 statements 代码块,直到 cond 条件为假,循环结束。
until 循环的执行流程为:
先对 condition 进行判断,如果该条件不成立,就进入循环,执行 until 循环体中的语句(do 和 done 之间的语句),这样就完成了一次循环。
每一次执行到 done 的时候都会重新判断 condition 是否成立,如果不成立,就进入下一次循环,继续执行循环体中的语句,如果成立,就结束整个 until 循环,执行 done 后面的其它 Shell 代码。
如果一开始 condition 就成立,那么程序就不会进入循环体,do 和 done 之间的语句就没有执行的机会。
注意,在 until 循环体中必须有相应的语句使得 condition 越来越趋近于 “成立”,只有这样才能最终退出循环,否则 until 就成了死循环,会一直执行下去,永无休止。
使用 until 循环,遍历数字
#!/bin/bash
num=0
until ((num > 3))
do
echo $num
((num++))
done
程序运行后,控制台输出如下:
首先,我们定义了一个整型类型的 变量 num,并且赋值为 0,接着使用 until 循环来判断变量 num 是否大于 3,如果不成立,则一直执行 echo 的代码块,并且每次执行后都将 num 变量加 1。
使用 until 循环,求和
#!/bin/bash
num=0
sum=0
until ((num > 100))
do
((sum+=num))
((num++))
done
echo $sum
程序运行后,控制台输出如下:
首先,我们定义了一个整型类型变量 num 和 sum,并且都赋值为 0,接着使用 until 循环来判断变量 num 是否大于 100,如果不成立,则一直将当前 sum 的值加上 num,并且每次执行后都将 num 变量加 1。
整个 until 循环执行完毕后,执行 echo 的代码块,输出 Sum 的值。因为 echo 语句不是在 until 循环的大括号的代码块里面,而是在 until 循环代码块外面,因此 echo 是 until 循环执行完毕才会执行的。
Shell 的 until 循环跟 while 循环正好相反,while 循环是当条件成立时,一直执行循环里的逻辑,而 until 循环是当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环。