循环
Bash 提供三种循环语法for
、while
和until
。
while 循环
while
循环有一个判断条件,只要符合条件,就不断循环执行指定的语句。
while condition; do
commands
done
上面代码中,只要满足条件condition
,就会执行命令commands
。然后,再次判断是否满足条件condition
,只要满足,就会一直执行下去。只有不满足条件,才会退出循环。
循环条件condition
可以使用test
命令,跟if
结构的判断条件写法一致。
#!/bin/bash
number=0
while [ "$number" -lt 10 ]; do
echo "Number = $number"
number=$((number + 1))
done
上面例子中,只要变量$number
小于 10,就会不断加 1,直到$number
等于 10,然后退出循环。
关键字do
可以跟while
不在同一行,这时两者之间不需要使用分号分隔。
while true; do
echo 'Hi, while looping ...'
done
上面的例子会无限循环,可以按下 Ctrl + c 停止。
while
循环写成一行,也是可以的。
$ while true; do echo 'Hi, while looping ...'; done
while
的条件部分也可以是执行一个命令。
$ while echo 'ECHO'; do echo 'Hi, while looping ...'; done
上面例子中,判断条件是echo 'ECHO'
。由于这个命令总是执行成功,所以上面命令会产生无限循环。
while
的条件部分可以执行任意数量的命令,但是执行结果的真伪只看最后一个命令的执行结果。
$ while true; false; do echo 'Hi, looping ...'; done
上面代码运行后,不会有任何输出,因为while
的最后一个命令是false
。
until 循环
until
循环与while
循环恰好相反,只要不符合判断条件(判断条件失败),就不断循环执行指定的语句。一旦符合判断条件,就退出循环。
until condition; do
commands
done
关键字do
可以与until
不写在同一行,这时两者之间不需要分号分隔。
until condition; do
commands
done
下面是一个例子。
$ until false; do echo 'Hi, until looping ...'; done
Hi, until looping ...
Hi, until looping ...
Hi, until looping ...
^C