循環語句
在shell中的循環語句如下:
for
while
unitl
case
select
for/while/unitl 必須以done結尾
for
循環
for
循環用來遍歷數組(數據列表)或執行計算語句。
在shell中 for
循環有兩種形式
第一種用來遍歷word序列的數據 word可以是以空格分隔的單詞,數組變量或是數字區間/字母區間。
示例:
循環次數爲數據序列的個數,每一次循環時會把變量i
賦值爲本次循環到的數據,可以用在循環體中訪問變量i。
第二種,示例:
在上面的循環中,expr1
爲i=0
;expr2
爲i<10
;expr3
爲i++
,其中expr1
在循環開始之前執行,expr2
定義了運行循環的條件,expr3
在循環中執行。
while
循環
while 循環會在指定條件爲真時循環執行代碼塊。
語法:
``list-1可以是命令,表達式,如果命令或表達式一直爲真則繼續執行
list-2``` 直到不爲真停止循環。
示例:
如果命令ls執行成功,則會一直執行命令echo,和ls,直到命令執行失敗。
示例2,使用表達式:
在上面的例子中,首先定義了一個變量i
賦值爲0,然後用表達式判斷i的值是否小於10,如果小於10則執行while循環體中的命令,let i++
每執行一次i加1,當i=10
時i不小於10,循環結束。
until
循環
until
循環是 while
循環的變體。該循環會在檢查條件是否爲真,如果條件爲真的話,就會退出這個循環。
語法:
示例:
當命令ls
執行成功時循環結束,until
循環會先判斷ls
是否執行成功,如果成功則不繼續循環,否則繼續循環,直到命令執行成功。
與while
循環一樣,until
也可以判斷表達式,如果表達式執行成功則跳出循環。
case
語句
case
語句是一個模式匹配語句,基於不同的條件來執行不同的動作,語法如下:
它會用word
嘗試與pattern
匹配,如果匹配則運行該模式下的命令.
示例:
在上面的示例中,將cash.sh傳入的第一個參數做匹配,每個模式下的命令必須以;;
結束,而case
語句必須以esac
結束。*
爲默認匹配,如果前面的模式都不能匹配,則運行該模式下的命令,如果一個模式下不想執行命令可以輸入兩個分號;;
結束。
select
語句
select
語句可以打印一個選項列表,用於與用戶交互。
語法:
select
將定義一個變量name
,然後從word
中將用戶選擇的編號對應的word
數據序列中對應的索引的值賦值給name
。
在下面的列子中,我將selelct
和case
語句結合起來使用。
當執行test.sh腳本時,···select將序列數據打印處理供用戶選擇,而
select只接受數字序列,然後
case語句將用戶選擇的數據做匹配,做出相應的動作。<br/>當用戶選擇1時,
select將其序列數據中的位置1的值賦值給變量
i,傳遞到
case```語句,然後做出相應的動作。
break
和continue
語句
break
和continue
可以跳出循環。不同的是break
會跳出循環,而continue
會忽略當此循環,繼續下載循環。它們可以在for
,while
,until
循環中使用。
break
語句
在上面的列子中,當i
等於2時,當2 % 2 == 0
,則會跳出for
循環,下面的循環將不會繼續。
continue
語句
在上面的列子中,當i % 2 == 0
時,continue
語句會終止當次循環,繼續執行下次循環,從而輸出1-10中的奇數。