如何在 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