除了 for
迴圈外, ShellScript 也允許使用不定迴圈,這是不定迴圈的語法:
while [ some program ];
do
echo while loop
done
其中 [ some program ]
除了可以用 [
這個指令外,也可以是任何其他的指令,反正只要有 exit code 都可以讓 while
去判斷是否要繼續執行。
不定迴圈最常用的莫過於無窮迴圈,在 ShellScript 裡面做無窮迴圈也非常簡單:
while [ TRUE ]; do
npm start
done
這樣執行程式有什麼好處呢?有時候我們改東西不用重開 Server --像是改 EJS 的 view、但是有時候調整設定像是 routing
要重開 Server ,要切換過去多少有點麻煩,用上面的 Watchdog 執行,只要透過 killall -9 node
就可以重開 Server 啦。
除了一般的 Watchdog 外,有時候我們也不知道 API Server 什麼時候會修好。這時候就可以用反向條件來跑 while
迴圈,反向條件只要在指令前面加上一個 !
就可以變成反向條件了。假如果們要用 curl 測試 API ,就可以用下面的指令:
while ! curl http://192.168.5.3/api/getList > /dev/null 2> /dev/null ; do
echo API fail
done
mplayer success.m4a
這樣就可以安心先弄別的東西,等到聽到音樂再回來間接他們的 API 啦。
當然有迴圈當然也可以 break
,像是這樣:
count=0
while ! curl http://192.168.5.3/api/getList > /dev/null 2> /dev/null ; do
echo API fail
count=$(( $count + 1 ))
if [ "$count" == 10 ]; then
break;
fi
done
if [ "$count" == 10 ]; then
mplayer success.m4a
else
mplayer giveup.m4a
fi
以上就是我在 Shell 裡面常常用到的不定迴圈。
我是誰?
我是 dd-han ,可以叫我呆翰,是國立臺中科技大學的延畢生 與 創科資訊的時習生。