在編寫shell指令碼,有可能是一種情況,當你需要採取一個路徑兩條路徑。所以,需要利用條件陳述式,讓程式作出正確的決策和執行正確的動作。
UNIX Shell支援條件陳述式,從而根據不同的條件下執行不同的操作。在這裡,我們將解釋以下兩個決策語句:
· if...else 語句
· case...esac 條件陳述式 if...else 語句:
if else語句是有用的決策語句,可以用來從一個給定的選項中選擇一個選項。
UNIX Shell支援以下形式的if.. else語句:
· if...fi 語句
· if...else...fi 語句
· if...elif...else...fi 語句
大部分的 if 語句檢查前面的章節中討論的關係運算子的關係。 case...esac 語句:
if...elif 可以使用多個 elif 語句執行多分支。然而,這並不總是最佳的解決方案,尤其是當所有的分支依賴於一個單一的變數的值。
UNIX Shell支援 case...esac 語句處理正是由於這個情況,它這樣做更有效地比 if...elif 語句。
目前只有一種形式的情況下,這裡詳細case...esac 語句:
· case...esacstatement
UNIX shell 的 case...esac 語句,比較像其他程式設計語言裡的 switch...case ,如C或C+ +和Perl等非常相似。
迴圈是一個強大的編程工具,使您能夠重複執行一組命令。在本教程中,您將學習以下類型的迴圈Shell程式:
· while 迴圈
· for 迴圈
· until 迴圈
· select 迴圈
你會根據不同情況使用不同的迴圈。例如用 while 迴圈執行命令,直到給定的條件下是 ture ,迴圈直到執行到一個給定的條件為 false。
有良好的編程習慣,將開始使用方式的基礎上適當的迴圈。這裡while和for迴圈類似在大多數其他的程式設計語言,如C,C++ 和 Perl 等。 嵌套迴圈:
所有支援嵌套迴圈的概念,這意味著可以把一個迴圈內其他類似或不同的迴圈。這種嵌套可以去高達無限數量的時間根據需要。
嵌套的while迴圈和類似的方式,可以嵌套其他迴圈的基礎上的編程要求下面是一個例子: 嵌套while迴圈:
作為另一個while迴圈的身體的一部分,這是可以使用一個while迴圈。 文法:
while command1 ; # this is loop1, the outer loop
do
Statement(s) to be executed if command1 is true
while command2 ; # this is loop2, the inner loop
do
Statement(s) to be executed if command2 is true
done
Statement(s) to be executed if command1 is true
done
例如:
這裡是迴圈嵌套一個簡單的例子,讓我們添加另一個倒計時迴圈內的迴圈,數到九:
#!/bin/sh
a=0
while [ "$a" -lt 10 ] # this is loop1
do
b="$a"
while [ "$b" -ge 0 ] # this is loop2
do
echo -n "$b "
b=`expr $b - 1`
done
echo
a=`expr $a + 1`
done
這將產生以下結果。重要的是要注意 echo -n 是如何工作。在這裡,-n選項echo ,以避免列印一個新行字元。
0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0
到目前為止,我們已經看到了,建立迴圈和使用迴圈來完成不同的任務。有時候,你需要停止迴圈或跳過迴圈迭代。
在本教程中,您將瞭解以下兩個語句用於控制 Shell 迴圈:
1. break 語句
2. continue 語句 無限迴圈:
迴圈有限的生命,他們跳出來,一旦條件是 false 還是 false 取決於迴圈。
由於所需的條件是不符合一個迴圈可能永遠持續下去。永遠不會終止執行一個迴圈執行無限次數。出於這個原因,這樣的迴圈被稱為無限迴圈。 例子:
下面是一個簡單的例子,使用while迴圈顯示數字0到9:
#!/bin/sh
a=10
while [ $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
這個迴圈將永遠持續下去,因為常是大於10,它永遠不會成為小於10。所以這是無限迴圈真實的例子。 break語句:
break語句用於終止整個迴圈的執行,完成後所有行代碼break語句的執行。然後,它逐級的代碼跟在迴圈結束。 文法
將用於以下break語句退出迴圈:
break
將用於以下break語句退出迴圈:
break n
這裡n指定的第n個封閉的迴圈退出。 例子:
下面是一個簡單的例子展示了迴圈將終止只要一變為5:
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a
if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
這將產生以下結果:
0
1
2
3
4
5
下面是一個簡單的嵌套迴圈的例子。這個指令碼打破兩個迴圈,如果的 var1 等於2 和 var2 等於0:
#!/bin/sh
for var1 in 1 2 3
do
for var2 in 0 5
do
if [ $var1 -eq 2 -a $var2 -eq 0 ]
then
break 2
else
echo "$var1 $var2"
fi
done
done
這將產生以下結果。內迴圈有一個 break 命令與參數2。這表明,如果條件得到滿足應該跳出外迴圈,並最終從內迴圈跳出。
1 0
1 5
continue 語句:
continue語句break命令類似,但它會導致當前迭代的迴圈退出,而不是整個迴圈。
這種參數是有用的,當一個錯誤已經發生,但你想嘗試執行下一個迴圈迭代。 文法
continue
和break語句一樣,一個整數參數可以給continue命令跳過嵌套迴圈的命令。
continue n
這裡n指定第n個封閉迴圈 continue 。 例子:
下面的迴圈利用continue語句返回,並開始處理下一個語句:
#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2`
if [ $Q -eq 0 ]
then
echo "Number is an even number!!"
continue
fi
echo "Found odd number"
done
這將產生以下結果:
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd numberfrom: http://www.yiibai.com/shell/what_is_shell.html#