和Java、PHP等語言不一樣,sh的流程式控制制不可為空白,如:
public class Test{ public static void main(String[] args){ int a = 10; if(a > 5){ System.out.println("a 大於 5"); } else{ //不做任何事 } }}
在bash裡不能這麼寫,如果 else 分支沒有語句執行,就不要寫這個 else 。 if
語句文法格式如下:
a=10b=20if [ $a == $b ]then echo "a is same to b."fi
if else
語句文法格式如下:
a=10b=20if [ $a == $b ]then echo "a is same to b."else echo "a is not same to b."fi
if else-if else
語句文法格式如下:
a=10b=20if [ $a == $b ]then echo "a 等於 b"elif [ $a -gt $b ]then echo "a 大於 b"elif [ $a -lt $b ]then echo "a 小於 b"else echo "沒有符合的條件"fi
輸出結果為:a 小於 b。
if else語句經常與test命令結合使用,如下所示:
num1=$[2*3]num2=$[1+5]if test $[num1] -eq $[num2]then echo '兩個數字相等!'else echo '兩個數字不相等!'fi
輸出結果為:兩個數字不相等。 for 迴圈
順序輸出當前列表中的數字:
for loop in 1 2 3 4 5do echo "The value is : $loop"done
while 語句
num=1while(( $num<=5 ))do echo $num let "num++"done
在bash中使用了 let 命令,它用於執行一個或多個運算式。變數計算中不需要加上 $ 變數。
while 迴圈可用於讀取鍵盤資訊。以下例子,輸入資訊被設定為變數 input ,按 Ctrl + D 結束迴圈。
echo "按下 ctrl + D 退出"echo "請輸入資訊:"while read inputdo echo "your input is : $input"done
until 迴圈
until 迴圈執行一系列命令直至條件為真時停止。
until 迴圈與 while 迴圈在處理方式上剛好相反。
num=5until(( $num>10 ))do echo $num let "num++"done
結果將依次輸出:5 6 7 8 9 10 case
可以用 case 語句匹配一個值與一個模式,如果匹配成功,執行相匹配的命令。
echo '請輸入資訊'read aNumcase $aNum in 1) echo '你選擇了 1' ;; 2) echo '你選擇了 2' ;; 3) echo '你選擇了 3' ;; "wsz") echo '你選擇了 wsz' ;; *) echo '你沒有輸入 1 到 4 之間的數字' ;;esac
case 工作方式如上所示。取值後面必須為單詞 in ,每一模式必須以右括弧結束。取值可以為變數或常數。匹配發現取值符合某一模式後,其間所有命令開始執行直至 ;; 表示 break。 取值將檢測匹配的每一個模式。一旦模式比對,則執行完匹配模式相應命令後不再繼續其他模式。如果無一匹配模式,使用星號 * 捕獲該值,再執行後面的命令。 esac 文法和C family語言差別很大,它需要一個 esac(就是case反過來)作為結束標記,每個 case 分支用) ,用 ;; 表示 break。
跳出迴圈
break
下面的例子中,指令碼進入死迴圈直至使用者輸入數字不是 1 2 3 4 5 中的一個。要跳出這個迴圈,需要使用break命令。
while :do read aNum case $aNum in 1|2|3|4|5) echo "your input is $aNum" ;; *) echo "game over" break ;; esacdone
continue
continue 命令與 break 命令類似,只有一點差別,它不會跳出所有迴圈,僅僅跳出當前迴圈。
for (( i=0 ; i<10 ; i++ ))do if [ $i == 3 ] then continue else echo $i fidone
上述結果將輸出:0 1 2 4 5 6 7 8 9,不會輸出 3。
參考自:http://www.runoob.com/linux/linux-shell-process-control.html