7. bash 三种循环方式详解

1. while 循环

Bash 提供三种循环语法forwhileuntil,首先是while循环。

while循环有一个判断条件,只要符合条件,就不断循环执行指定的语句。

while condition; do
  commands
done

上面代码中,只要满足条件condition,就会执行命令commands。然后,再次判断是否满足条件condition,只要满足,就会一直执行下去。只有不满足条件,才会退出循环。

中间的do关键字是循环体的开始,done关键字则是循环体的结束。

循环条件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

2. until 循环

until循环与while循环恰好相反,只要不符合判断条件(判断条件失败),就不断循环执行指定的语句。一旦符合判断条件,就退出循环。

until condition; do
  commands
done

关键字do可以与until不写在同一行,这时两者之间不需要分号分隔,写法与while一致。

until condition
do
  commands
done

下面是一个例子。

until false; do echo 'Hi, until looping ...'; done

上面代码中,until的部分一直为false,导致命令无限运行,必须按下 Ctrl + c 终止。

#!/bin/bash

number=0
until [ "$number" -ge 10 ]; do
  echo "Number = $number"
  number=$((number + 1))
done

上面例子中,只要变量number小于10,就会不断加1,直到number大于等于10,就退出循环。

until的条件部分也可以是一个命令,表示在这个命令执行成功之前,不断重复尝试。

until cp $1 $2; do
  echo 'Attempt to copy failed. waiting...'
  sleep 5
done

上面例子表示,只要cp $1 $2这个命令执行不成功,就5秒钟后再尝试一次,直到成功为止。

until循环都可以转为while循环,只要把条件设为否定即可。上面这个例子可以改写如下。

while ! cp $1 $2; do
  echo 'Attempt to copy failed. waiting...'
  sleep 5
done

一般来说,until用得比较少,完全可以统一都使用while

3. for…in 循环

for...in循环用于遍历列表的每一项。

for variable in list
do
  commands
done

上面语法中,for循环会依次从list列表中取出一项,作为变量variable,然后在循环体中进行处理。

关键词do可以跟for写在同一行,两者使用分号分隔。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux