1. 程式人生 > >SHELL中的while迴圈

SHELL中的while迴圈

流控制:while迴圈

在程式語言中,迴圈非常常見。在bash中,bash也有類似的關鍵字,構建這樣的迴圈:

#!/bin/bash

# 顯示一系列數字

count=1

while [ $count -le 6 ]; do
    echo $count
    count=$((count + 1))
done
echo "finished"

執行指令碼:./while-count.sh,結果如下:

[fbap:/home/fbap/usertmp]>./while-count.sh
1
2
3
4
5
6
finished

就如同if指令一樣,while會判斷一系列指令的退出狀態。只要退出狀態為0,它就執行迴圈體內的命令。在上述迴圈中,我們建立了count變數並進行了初始化,while命令會判斷test命令的退出狀態,只要為0,那門迴圈體內的指令就會執行(列印count變數,並且count加1)。

下面有一個使用while迴圈更加高階的一個例子:

#!/bin/bash

#
# 一個選單驅動的展示系統資訊的指令碼
#

# 展示結果的延遲時間(單位/秒)
DELAY=3

while [[ "$REPLY" != "0" ]]; do
    clear
    cat <<EOF
----------------------------
請選擇:
    1.顯示系統資訊
    2.顯示磁碟使用情況
    3.顯示使用者空間使用情況
    0.退出
----------------------------
EOF
    read -p "請輸入你的選擇[0-3]:"
if [[ $REPLY =~ ^[0-3]$ ]];then # 顯示系統使用情況 if [[ "$REPLY" = "1" ]];then echo echo "主機名:${HOSTNAME}" uptime sleep $DELAY fi # 顯示磁碟使用情況 if [[ "$REPLY" = "2" ]];then df -h sleep $DELAY fi # 顯示使用者空間使用情況 if
[[ "$REPLY" = "3" ]];then # 判定有效使用者是否為root if [[ $(id -u) -eq 0 ]];then echo echo "(所有使用者)使用者空間使用情況:" du -sh /home/* else echo echo "(${USER})使用者空間使用情況:" du -sh $HOME fi sleep $DELAY fi else echo "非法輸入" sleep $DELAY fi done echo "指令碼退出"

執行指令碼:./read-menu.sh,輸出:

----------------------------
請選擇:
    1.顯示系統資訊
    2.顯示磁碟使用情況
    3.顯示使用者空間使用情況
    0.退出
----------------------------
請輸入你的選擇[0-3]:1

主機名:localhost.localdomain
 17:28:28 up 333 days, 44 min, 10 users,  load average: 1.04, 1.06, 1.17

在上面的例子中,將選單封裝在while迴圈內,程式就可以在使用者每次選擇後重復展示選單項。只要REPLY值不為0,重複迴圈,展示選單項,給使用者又一次的選擇機會。而在每次動作結束時,系統執行sleep命令使程式暫停幾秒,讓使用者看到選擇執行的結果,隨後清空螢幕顯示並再次顯示選單。