Shell 流程控制
和 Java 、 PHP 等語言不一樣,sh 的流程控制不可為空,如 (以下為 PHP 流程控制寫法):
結束迴圈。
echo ‘ 按下 退出’
echo -n ‘ 輸入你最喜歡的電影名: ‘
while read FILM
do
echo “ 是的!$FILM 是一部好電影”
done
執行指令碼,輸出類似下面:
按下 退出
輸入你最喜歡的電影名: w3cschool 菜鳥教程
是的!w3cschool 菜鳥教程 是一部好電影
無限迴圈
無限迴圈語法格式:
while :
do
command
done
或者
while true
do
command
done
或者
for (( ; ; ))

until 迴圈
until 迴圈執行一系列命令直至條件為真時停止。
until 迴圈與 while 迴圈在處理方式上剛好相反。
一般 while 迴圈優於 until 迴圈,但在某些時候—也只是極少數情況下,until 迴圈更加有用。
until 語法格式:
until condition
do
command
done
條件可為任意測試條件,測試發生在迴圈末尾,因此迴圈至少執行一次—請注意這一點。

case
Shell case 語句為多選擇語句。可以用 case 語句匹配一個值與一個模式,如果匹配成功,執行相匹配的命令。 case 語句格式如下:
case 值 in
模式 1)
command1
command2

commandN
;;
模式 2)
command1
command2

commandN
;;
esac
case 工作方式如上所示。取值後面必須為單詞 in,每一模式必須以右括號結束。取值可以為變數或常數。匹配發現取值符合某一模式後,其間所有命令開始執行直至 ;; 。
取值將檢測匹配的每一個模式。一旦模式匹配,則執行完匹配模式相應命令後不再繼續其他模式。如果無一匹配模式,使用星號 * 捕獲該值,再執行後面的命令。
下面的指令碼提示輸入 1 到 4,與每一種模式進行匹配:
echo ‘ 輸入 1 到 4 之間的數字:’
echo ‘ 你輸入的數字為:’
read aNum
case $aNum in
1) echo ‘ 你選擇了 1’
;;
2) echo ‘ 你選擇了 2’
;;
3) echo ‘ 你選擇了 3’
;;
4) echo ‘ 你選擇了 4’
;;
*) echo ‘ 你沒有輸入 1 到 4 之間的數字’
;;
esac
輸入不同的內容,會有不同的結果,例如:
輸入 1 到 4 之間的數字:
你輸入的數字為:
3
你選擇了 3

跳出迴圈
在迴圈過程中,有時候需要在未達到迴圈結束條件時強制跳出迴圈,Shell 使用兩個命令來實現該功能:break 和 continue 。
break 命令
break 命令允許跳出所有迴圈(終止執行後面的所有迴圈)。
下面的例子中,指令碼進入死迴圈直至使用者輸入數字大於 5 。要跳出這個迴圈,返回到 shell 提示符下,需要使用 break 命令。
#!/bin/bash
while :
do
echo -n “ 輸入 1 到 5 之間的數字:”
read aNum
case $aNum in
1|2|3|4|5) echo “ 你輸入的數字為 $aNum!”
;;
*) echo “ 你輸入的數字不是 1 到 5 之間的! 遊戲結束”
break
;;
esac
done
執行以上程式碼,輸出結果為:
輸入 1 到 5 之間的數字:3
你輸入的數字為 3!
輸入 1 到 5 之間的數字:7
你輸入的數字不是 1 到 5 之間的! 遊戲結束
continue
continue 命令與 break 命令類似,只有一點差別,它不會跳出所有迴圈,僅僅跳出當前迴圈。
對上面的例子進行修改:
#!/bin/bash
while :
do
echo -n “ 輸入 1 到 5 之間的數字: ”
read aNum
case $aNum in
1|2|3|4|5) echo “ 你輸入的數字為 $aNum!”
;;
*) echo “ 你輸入的數字不是 1 到 5 之間的!”
continue
echo “ 遊戲結束”
;;
esac
done
執行程式碼發現,當輸入大於 5 的數字時,該例中的迴圈不會結束,語句 echo “Game is over!” 永遠不會被執行。

esac
case 的語法和 C family 語言差別很大,它需要一個 esac(就是 case 反過來)作為結束標記,每個 case 分支用右圓括號,用兩個分號表示 break 。

 
原文連結:http://www.runoob.com/linux/linux-shell-process-control.html