Shell腳本編程-分支與循環

Shell腳本編程-分支與循環

分支與循環是一個編程語言必須具備的結構,在講解分支與循環之前,我們先要來學習一下控制分支與循環的判斷條件。

一、條件判斷式

條件判斷分爲三大類:文件判斷運算符、字符串比較運算符和算術比較運算符。表達式可以使用test命令,也可以使用[  ]中括號將其括起來,但是中括號兩邊要有且僅有一個空格隔開。

1. 判斷文件是否存在:[ -e pathname]

-e(exist)存在,如果pathname存在,則判斷式爲真,否則爲假。

2. 判斷文件類型

2.1 文件是否是目錄:[ -d pathname ]

-d(directory)目錄,如果pathname是目錄,則判斷式爲真,否則爲假。

2.2 文件是否是普通文件:[ -f pathname ]

-f(file)文件,如果pathname是普通文件,則判斷式爲真,否則爲假。

2.3 文件是否是符號鏈接:[ -L pahname ]

-L(Link)符號鏈接,如果pathname是符號鏈接,則判斷式爲真,否則爲假。

3. 判斷文件的權限

3.1 文件是否具有可讀權限: [ -r pathname ]

-r(read)可讀,如果pathname具有可讀權限,則判斷式爲真,否則爲假。

3.2 文件是否具有可寫權限:[ -w pathname ]

-w(write)可寫,如果pathname具有可寫權限,則判斷式爲真,否則爲假。

3.3 文件是否具有可執行權限:[ -x pathname ]

-x(exec)可執行,如果pathname具有可執行權限,則判斷式爲真,否則爲假。

4. 文件的最後修改時間比較

4.1 文件較另一個文件新:[ pathname1 -nt pathname2 ]

-nt(new than),如果pathname1的文件最後更新時間比pathname2新,則判斷式爲真,否則爲假。

4.2 文件較另一個文件舊:[ pathname1 -ot pathname2 ]

-ot(old  than),如果pathname1的文件最後更新時間比pathname2舊,則判斷式爲真,否則爲假。


5. 判斷字符串長度

5.1 判斷字符串長度爲零:[ -z string ]

-z(zero),如果string字符串的長度爲0,則判斷式爲真,否則爲假。

5.2 判斷字符串長度非零:[ -n string ]

-n(not zero),如果string字符串的長度非0,則判斷式爲真,否則爲假。

6. 字符串相等比較

6.1 判斷字符串是否相等:[ string1 = string2 ]

如果string1與string2的字符串完成相同,則判斷式爲真,否則爲假。

6.2 判斷字符串是否不相等:[ string1 != string2 ]

如果string與string2的字符串不相等,則判斷式爲真,否則爲假。

7. 算術比較

7.1 等於:[ num1 -eq num2 ]

7.2 不等於: [ num1 -ne num2 ]

7.3 小於:[ num1 -lt num2 ]

7.4 小於或等於:[ num1 -le num2 ]

7.5 大於:[ num1 -gt num2 ]

7.5 大於或等於:[ num1 -ge num2 ]  

二、分支結構

1.if 分支結構

1.1 簡單的if分支

if[ 判斷式 ];then

   ......

fi

1.2 if-else分支。

if[ 判斷式 ];then

   ......

else

   ......

fi

1.3 if-else-if分支

if[ 判斷式 ];then

   ......

elif

   ......

else

   ......

fi

2. 邏輯短路分支

2.1 判斷式 && 命令

當前面的判斷式爲真,後面的命令就會被執行,前面的判斷式爲假,則命令不會被執行。

例如:test 4 -gt 3  &&  echo TRUE

2.2 判斷式 || 命令

當前面的判斷式爲真,後面的命令不會被執行,前面的判斷式爲假,則執行後面的命令。

3. test分支

[ 判斷式 ];命令

當判斷式爲真,則執行後面的命令,否則不執行。例如:[ 4 -gt 3 ];echo TRUE

4. case分支

case 字符串 in

模式1)command;;

模式2)command;;

....

esac

模式可以是字符串也可以是正則表達式,可以將多個模式用 | 隔開,表示都匹配。注意,在每個命令後面有兩個分號。

三、循環結構

1. for循環

for 容器變量 in 列表

do

   ......

done

從列表中,每次取得一項賦值給容器變量,然後進入do處理循環。

2. while循環

while [ 判斷式 ]

do

   ......

done

判斷式爲真,則繼續執行do中的內容,爲假則結束循環。

3. until [ 判斷式 ]

do

   ......

done

until正好與while相反。當判斷式爲假則繼續執行do的內容,爲真則結束循環。


4. 跳出機制

4.1. exit [n]

exit後面可以帶一個數字表示退出碼。exit會停止shell程序的執行,並將返回值設置爲n。

4.2. break [n]

中止循環,並跳到下一個命令,N表示跳出嵌套的層數。

4.3. continue [n]

停止循環過程的當前一個反覆並且跳到循環中的下一個反覆過程的開始部分,n表示忽略的層數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章