2021-05-12 14:32:11
Bash 中的 while 迴圈詳解
迴圈是程式語言的基本概念之一。當您想要多次執行一系列命令直到滿足特定條件時,迴圈很方便。
在諸如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迴圈。
如果您有任何問題,請隨時發表評論。
相關文章