首頁 > 軟體

Bash 中的 while 迴圈詳解

2020-06-16 16:34:16

迴圈是程式語言的基本概念之一。當您想要多次執行一系列命令直到滿足特定條件時,迴圈很方便。

在諸如Bash之類的指令碼語言中,迴圈對於自動執行重複性任務非常有用。在Bash指令碼中有3個基本的迴圈結構,for迴圈,while迴圈,until迴圈

本教學解釋了Bash中while迴圈的基礎知識,以及用於改變迴圈流的break和continue語句。

Bash while 迴圈

只要給定條件的計算結果為true,while迴圈就會使用一組給定的命令執行未知次數。

Bash while迴圈採用以下形式:

while [CONDITION]
do
  [COMMANDS]
done

在執行命令之前評估條件。如果條件計算結果為true,則執行命令。否則,如果條件的計算結果為false,則迴圈將終止,程式控制將傳遞給後面的命令。

在下面的範例中,在每次疊代時,迴圈列印變數的當前值並將變數i遞增1。

i=0

while [ $i -le 2 ]
do
  echo Number: $i
  ((i++))
done

只要i小於或等於2,Tue迴圈就會疊代。它將產生以下輸出:

Number: 0
Number: 1
Number: 2

無限while迴圈

無限迴圈是一個無限重複且永不終止的迴圈。如果條件總是計算為true,則會得到無限迴圈。

在下面的範例中,我們使用內建命令:,該命令始終返回true以建立無限迴圈。您還可以使用true內建命令或始終返回true的任何其他語句。

while :
do
  echo "Press <CTRL+C> to exit."
  sleep 1
done

上面的while迴圈將無限期地執行。您可以按下來終止迴圈CTRL+C。

這是一個單行等價物:

while :; do echo 'Press <CTRL+C> to exit.'; sleep 1; done

逐行讀取檔案

while迴圈最常見的用法之一是逐行讀取檔案,資料流或變數。

在下面的範例中,while迴圈將/etc/passwd逐行讀取檔案並列印每一行。

file=/etc/passwd

while read -r line; do
  echo $line
done < "$file"

我們使用輸入重定向(< "$file")將檔案傳遞給read控制迴圈的命令,而不是使用條件控制while迴圈。while迴圈將一直執行,直到讀取最後一行。

當逐行讀取檔案中的行始終使用read與-r選項,以防止反斜線作為跳脫字元。

預設情況下,該read命令修剪前導/尾隨空格字元(空格和製表符)。使用命令IFS=前的選項read可以防止此行為

file=/etc/passwd

while IFS= read -r line; do
  echo $line
done < "$file"

break和continue語句

break和continue語句可用於控制while迴圈執行。

break語句

break語句終止當前迴圈並將程式控制傳遞給終止迴圈後面的命令。它通常用於在滿足某個條件時終止迴圈。

在下面的範例中,一旦當前疊代項等於,將中斷迴圈的執行2。

i=0

while [ $i -lt 5 ]
do
  echo "Number: $i"
  ((i++))
  if [[ "$i" == '2' ]]; then
    break
  fi
done

echo 'All Done!'
Number: 0
Number: 1
All Done!

continue語句

continue語句退出迴圈的當前疊代,並將程式控制傳遞給迴圈的下一次疊代。

在下面的內容中,一旦當前疊代項等於2continue語句,將導致執行返回到回圈的開始並繼續下一次疊代。

i=0

while [ $i -lt 5 ]
do
  ((i++))
  if [[ "$i" == '2' ]]; then
    continue
  fi
  echo "Number: $i"
done

echo 'All Done!'
Number: 1
Number: 3
Number: 4
Number: 5
All Done!

結論

到現在為止,您應該很好地理解如何使用bash while迴圈。

如果您有任何問題,請隨時發表評論。


IT145.com E-mail:sddin#qq.com