Shell教程(四):条件语句、循环语句、break/continue
在編寫shell腳本,有可能是一種情況,當你需要采取一個路徑兩條路徑。所以,需要利用條件語句,讓程序作出正確的決策和執(zhí)行正確的動作。
UNIX Shell支持條件語句,從而根據不同的條件下執(zhí)行不同的操作。在這里,我們將解釋以下兩個決策語句:
·????????if...else?語句
·????????case...esac?條件語句
if...else?語句:
if else語句是有用的決策語句,可以用來從一個給定的選項中選擇一個選項。
UNIX Shell支持以下形式的if.. else語句:
·????????if...fi 語句
·????????if...else...fi 語句
·????????if...elif...else...fi 語句
大部分的 if 語句檢查前面的章節(jié)中討論的關系運算符的關系。
case...esac 語句:
if...elif 可以使用多個 elif ?語句執(zhí)行多分支。然而,這并不總是最佳的解決方案,尤其是當所有的分支依賴于一個單一的變量的值。
UNIX Shell支持?case...esac?語句處理正是由于這個情況,它這樣做更有效地比 if...elif 語句。
目前只有一種形式的情況下,這里詳細case...esac?語句:
·????????case...esacstatement
UNIX shell 的 case...esac?語句,比較像其他編程語言里的 switch...case ,如C或C+ +和Perl等非常相似。
?
?
循環(huán)是一個強大的編程工具,使您能夠重復執(zhí)行一組命令。在本教程中,您將學習以下類型的循環(huán)Shell程序:
·????????while 循環(huán)
·????????for 循環(huán)
·????????until 循環(huán)
·????????select 循環(huán)
你會根據不同情況使用不同的循環(huán)。例如用 while 循環(huán)執(zhí)行命令,直到給定的條件下是 ture ,循環(huán)直到執(zhí)行到一個給定的條件為 false。
有良好的編程習慣,將開始使用情況的基礎上適當的循環(huán)。這里while和for循環(huán)類似在大多數其他的編程語言,如C,C++ 和 Perl 等。
嵌套循環(huán):
所有支持嵌套循環(huán)的概念,這意味著可以把一個循環(huán)內其他類似或不同的循環(huán)。這種嵌套可以去高達無限數量的時間根據需要。
嵌套的while循環(huán)和類似的方式,可以嵌套其他循環(huán)的基礎上的編程要求下面是一個例子:
嵌套while循環(huán):
作為另一個while循環(huán)的身體的一部分,這是可以使用一個while循環(huán)。
語法:
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例如:
這里是循環(huán)嵌套一個簡單的例子,讓我們添加另一個倒計時循環(huán)內的循環(huán),數到九:
#!/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?
?
到目前為止,我們已經看到了,創(chuàng)建循環(huán)和使用循環(huán)來完成不同的任務。有時候,你需要停止循環(huán)或跳過循環(huán)迭代。
在本教程中,您將了解以下兩個語句用于控制 Shell 循環(huán):
1.? break?語句
2.? continue?語句
無限循環(huán):
循環(huán)有限的生命,他們跳出來,一旦條件是 false 還是 false 取決于循環(huán)。
由于所需的條件是不符合一個循環(huán)可能永遠持續(xù)下去。永遠不會終止執(zhí)行一個循環(huán)執(zhí)行無限次數。出于這個原因,這樣的循環(huán)被稱為無限循環(huán)。
例子:
下面是一個簡單的例子,使用while循環(huán)顯示數字0到9:
#!/bin/sh ? a=10 ? while [ $a -lt 10 ] do ?? echo $a ?? a=`expr $a + 1` done這個循環(huán)將永遠持續(xù)下去,因為常是大于10,它永遠不會成為小于10。所以這是無限循環(huán)真實的例子。
break語句:
break語句用于終止整個循環(huán)的執(zhí)行,完成后所有行代碼break語句的執(zhí)行。然后,它逐級的代碼跟在循環(huán)結束。
語法
將用于以下break語句退出循環(huán):
break將用于以下break語句退出循環(huán):
break n這里n指定的第n個封閉的循環(huán)退出。
例子:
下面是一個簡單的例子展示了循環(huán)將終止只要一變?yōu)?:
#!/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下面是一個簡單的嵌套循環(huán)的例子。這個腳本打破兩個循環(huán),如果的 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這將產生以下結果。內循環(huán)有一個 break 命令與參數2。這表明,如果條件得到滿足應該跳出外循環(huán),并最終從內循環(huán)跳出。
1 0 1 5continue 語句:
continue語句break命令類似,但它會導致當前迭代的循環(huán)退出,而不是整個循環(huán)。
這種參數是有用的,當一個錯誤已經發(fā)生,但你想嘗試執(zhí)行下一個循環(huán)迭代。
語法
continue和break語句一樣,一個整數參數可以給continue命令跳過嵌套循環(huán)的命令。
continue n這里n指定第n個封閉循環(huán) continue 。
例子:
下面的循環(huán)利用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#總結
以上是生活随笔為你收集整理的Shell教程(四):条件语句、循环语句、break/continue的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell教程(三):数组/Arrays
- 下一篇: Shell教程(五):替代、引用机制、输