在本小節中,將演示如何在Bash指令碼中使用while
迴圈語句。
bash while迴圈可以定義為控制流語句,只要所應用的條件為真,該語句就允許重複執行給定的命令集。例如,可以執行多次echo
命令,也可以僅逐行讀取文字檔案,然後使用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迴圈」的所有工作。do
和done
之間的命令就會重複執行。while
迴圈的引數可以是布林表示式。while迴圈是一個受限的輸入迴圈,因此在執行while迴圈的命令之前要先檢查條件。如果條件評估為真,則執行該條件之後的命令集。否則,迴圈終止,並且在done
語句之後將程式控制權交給另一個命令。
以下是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."
執行上面範例程式碼,得到以下結果:
範例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."
執行上面範例程式碼,得到以下結果:
範例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
執行上面範例程式碼,得到以下結果:
在這裡,我們使用了始終返回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
根據上面指令碼,將迴圈分配為疊代十次。但是在八次疊代之後存在一個條件,該條件會中斷迭代並終止迴圈。執行指令碼後,顯示如下輸出。
範例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."
執行上面範例程式碼,得到以下結果:
範例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
執行上面範例程式碼,得到以下結果: