Shell腳本編程-分支與循環
一、條件判斷式
1. 判斷文件是否存在:[ -e pathname]
2. 判斷文件類型
2.1 文件是否是目錄:[ -d pathname ]
2.2 文件是否是普通文件:[ -f pathname ]
2.3 文件是否是符號鏈接:[ -L pahname ]
3. 判斷文件的權限
3.1 文件是否具有可讀權限: [ -r pathname ]
3.2 文件是否具有可寫權限:[ -w pathname ]
3.3 文件是否具有可執行權限:[ -x pathname ]
4. 文件的最後修改時間比較
4.1 文件較另一個文件新:[ pathname1 -nt pathname2 ]
4.2 文件較另一個文件舊:[ pathname1 -ot pathname2 ]
5. 判斷字符串長度
5.1 判斷字符串長度爲零:[ -z string ]
5.2 判斷字符串長度非零:[ -n string ]
6. 字符串相等比較
6.1 判斷字符串是否相等:[ 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表示忽略的層數。