如何在 Bash 中使用 While 循环

Suraj Joshi 2023年1月30日
  1. Bash 中的 while 循环语法
  2. 例子:Bash 中的 while 循环
  3. 示例:Bash 中的无限 while 循环
  4. 示例:带有 break 语句的 Bash 中的 while 循环
  5. 示例:带有 continue 语句的 Bash 中的 while 循环
如何在 Bash 中使用 While 循环

while 循环几乎是所有编程语言中使用最广泛的循环结构之一。当我们不知道需要运行一个循环的次数时,就会用到它。我们可以为 while 循环指定一个条件,循环中的语句会被执行,直到条件变为假。

Bash 中的 while 循环语法

while [condition]
do
   command-1
   command-2
     ...
     ...
   command-n
done

这里,condition 代表每次在循环中执行命令前需要检查的条件。如果 condition 为真,我们就执行循环中的语句。如果 condition 为假,我们退出循环。从 command-1command-n 的语句是在循环中执行的语句,直到 condition 变为 false

例子:Bash 中的 while 循环

#!/bin/bash

num=5

while [ $num -ge 0 ]
do
  echo $num
  ((num--))
done

输出:

5
4
3
2
1
0

这里,最初,num 被设置为 5。只要 num 的值大于或等于 0,我们就在终端打印 num,并在循环中把 num 递减 1。

示例:Bash 中的无限 while 循环

#!/bin/bash

while true
do
  echo "This is an infinite while loop. Press CTRL + C to exit out of the loop."
  sleep 0.5
done

输出:

This is an infinite while loop. Press CTRL + C to exit out of the loop.
This is an infinite while loop. Press CTRL + C to exit out of the loop.
This is an infinite while loop. Press CTRL + C to exit out of the loop.
^C

这是一个无限循环,每 0.5 秒打印出 This is an infinite while loop. Press <kbd>Ctrl</kbd>+<kbd>C</kbd> to exit out of the loop.。要退出循环,我们可以按 CTRL+C

示例:带有 break 语句的 Bash 中的 while 循环

#!/bin/bash

num=5

while [ $num -ge 0 ]
do
  echo $num
  ((num--))
  if [[ "$num" == '3' ]]; then
    echo "Exit out of loop due to break"
    break
  fi
done

输出:

5
4
Exit out of loop due to break

在上面的程序中,num 初始化为 5,只要 num 大于或等于 0,循环就会被执行,但由于循环中的 break 语句在 num 为 3 时,所以当 num 的值变成 3 时,我们就退出循环。

示例:带有 continue 语句的 Bash 中的 while 循环

#!/bin/bash

num=6

while [ $num -ge 1 ]
do
  ((num--))
  if [[ "$num" == '3' ]]; then
    echo "Ignore a step due to continue"
    continue
  fi
  echo $num
  
done

输出:

5
4
Ignore a step due to continue
2
1
0

在上面的程序中,num 初始化为 6,在循环中,我们首先将 num 减少 1,然后打印 num 的最新值。只要 num 值大于或等于 1,循环就会执行。当 num 变成 3 时,脚本不打印 num 的值,因为当 num 为 3 时,我们有 continue 语句。

作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn