在shell中的循環語句以下:shell
for
while
unitl
case
select
for/while/unitl 必須以done結尾編程
for
循環for
循環用來遍歷數組(數據列表)或執行計算語句。數組
在shell中 for
循環有兩種形式ide
第一種用來遍歷word序列的數據 word能夠是以空格分隔的單詞,數組變量或是數字區間/字母區間。
示例:3d
循環次數爲數據序列的個數,每一次循環時會把變量i
賦值爲本次循環到的數據,能夠用在循環體中訪問變量i。code
第二種,示例:blog
在上面的循環中,expr1
爲i=0
;expr2
爲i<10
;expr3
爲i++
,其中expr1
在循環開始以前執行,expr2
定義了運行循環的條件,expr3
在循環中執行。索引
while
循環while 循環會在指定條件爲真時循環執行代碼塊。it
語法:class
``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中的奇數。