SHELL中的while迴圈
阿新 • • 發佈:2019-02-17
流控制: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命令使程式暫停幾秒,讓使用者看到選擇執行的結果,隨後清空螢幕顯示並再次顯示選單。