Bash while迴圈


在本小節中,將演示如何在Bash指令碼中使用while迴圈語句。

bash while迴圈可以定義為控制流語句,只要所應用的條件為真,該語句就允許重複執行給定的命令集。例如,可以執行多次echo命令,也可以僅逐行讀取文字檔案,然後使用Bash中的while迴圈處理結果。

Bash While迴圈語法

Bash while迴圈具有以下格式:

while [ expression ];  
do  
commands;  
multiple commands;  
done

僅當表示式(expression)包含單個條件時,以上語法才適用。

如果表示式中包含多個條件,則while迴圈的語法如下:

while [ expressions ];  
do  
commands;  
multiple commands;  
done

while迴圈單行語法可以定義為:

while [ condition ]; do commands; done  
while control-command; do Commands; done

while迴圈語句有一些關鍵要點:

  • 在執行命令之前檢查條件。
  • 可以使用while迴圈來執行「for迴圈」的所有工作。
  • 只要條件評估為真,dodone之間的命令就會重複執行。
  • while迴圈的引數可以是布林表示式。

如何工作

while迴圈是一個受限的輸入迴圈,因此在執行while迴圈的命令之前要先檢查條件。如果條件評估為真,則執行該條件之後的命令集。否則,迴圈終止,並且在done語句之後將程式控制權交給另一個命令。

While迴圈範例

以下是bash while迴圈的一些範例:

範例1. 單條件的While迴圈
在此範例中,while迴圈與表示式中的單個條件一起使用。這是while迴圈的基本範例,它將根據使用者輸入列印一系列數位。

指令碼檔案:while-basic.sh

#!/bin/bash  
#Script to get specified numbers  

read -p "Enter starting number: " snum  
read -p "Enter ending number: " enum  

while [[ $snum -le $enum ]];  
do  
echo $snum  
((snum++))  
done  

echo "This is the sequence that you wanted."

執行上面範例程式碼,得到以下結果:
單條件的While循環

範例2. 有多個條件的While迴圈

以下是在表示式中具有多個條件的while迴圈範例。

指令碼檔案:while-basic2.sh

#!/bin/bash  
#Script to get specified numbers  

read -p "Enter starting number: " snum  
read -p "Enter ending number: " enum  

while [[ $snum -lt $enum || $snum == $enum ]];  
do  
echo $snum  
((snum++))  
done  

echo "This is the sequence that you wanted."

執行上面範例程式碼,得到以下結果:
有多個條件的While循環

範例3. 無限While迴圈
無限迴圈是沒有結束或終止的迴圈。如果條件始終評估為true,則將建立一個無限迴圈。迴圈將會連續執行,直到使用CTRL + C強行停止迴圈為止。

指令碼檔案:while-infinite.sh

#!/bin/bash  
#An infinite while loop  

while :  
do  
echo "Welcome to Yiibai."  
sleep 1s
done

也可以將上述指令碼寫成一行:

#!/bin/bash  
#An infinite while loop  

while :; do echo "Welcome to Yiibai."; done

執行上面範例程式碼,得到以下結果:
無限While循環

在這裡,我們使用了始終返回true的內建命令(:)。還可以使用內建命令true來建立無限迴圈,如下所示:

#!/bin/bash  
#An infinite while loop  

while true  
do  
echo "Welcome to Yiibai"  
done

上面bash指令碼輸出與上述無限指令碼輸出的結果相同。

注意:無限迴圈可以通過使用CTRL + C或在指令碼內新增一些條件退出來終止。

範例4. While迴圈與Break語句
根據所應用的條件,可以使用break語句來停止迴圈。指令碼檔案:whilie-break.sh

#!/bin/bash  
#While Loop Example with a Break Statement  

echo "Countdown for Website Launching..."  
i=10  
while [ $i -ge 1 ]  
do  
if [ $i == 2 ]  
then  
    echo "Mission Aborted, Some Technical Error Found."  
    break  
fi  
echo "$i"  
(( i-- ))  
done

根據上面指令碼,將迴圈分配為疊代十次。但是在八次疊代之後存在一個條件,該條件會中斷迭代並終止迴圈。執行指令碼後,顯示如下輸出。
While循環與Break語句

範例5. While迴圈與Continue語句

continue語句可用於在while迴圈內跳過特定條件的疊代。

指令碼檔案:while-continue.sh

#!/bin/bash  
#While Loop Example with a Continue Statement  

i=0  
while [ $i -le 10 ]  
do  
((i++))  
if [[ "$i" == 5 ]];  
then  
    continue  
fi  
echo "Current Number : $i"  
done  

echo "Skipped number 5 using Continue Statement."

執行上面範例程式碼,得到以下結果:
While循環與Continue語句

範例6. C語言樣式while迴圈

還可以在bash指令碼中編寫像在C程式設計語言中編寫while迴圈一樣。指令碼檔案:while-cstyle.sh

#!/bin/bash  
#While loop example in C style  

i=1  
while((i <= 10))  
do  
echo $i  
let i++  
done

執行上面範例程式碼,得到以下結果:

C語言樣式while循環