1. if-then 語句
基本格式:
if command //若command命令執行完畢之後的狀態碼返回值為0,則執行then中的命令,否則 不執行then中的命令
then
commands
fi
if command;then //另一種格式
else 格式
if command;then //如果command中命令返回的退出狀態碼為0,則執行then
else
commands //如果command中命令返回的退出狀態碼為非0,則執行else
elif 格式
if command;then
elif command;then
2. test命令
if test condition;then //如果condition條件不寫,則以非零狀態碼退出,執行else中的 commands
(1) my_variable="full"; test $my_variable //若變數my_variable為空,則退出碼為非0,若有內容,則為0
方括號的表達形式
if [ condition ] //使用方括號來代替test,但是在方括號的兩邊必須具有空格
通常test可以測試三類條件
(1)數值比較
n1 -eq n2 //是否相等,相等,則退出碼為0
n1 -ge n2 //是否大於或等於
n1 -gt n2 //是否大於
n1 -le n2 //是否小於等於
n1 -lt n2 //是否小於
n1 -ne n2 //不等於
其中n1 和 n2 可以使用變數,例如有變數var ,可以 $var -ne n2 這樣使用,這種比較不能使用在浮點數中
(2)字串比較
str1 = str2 //比較是否相等,透過ASCII表來比較,因此會比較標點,大小寫等
str1 != str2 //比較是否不相等 等號兩邊留空格,也可以使用變數的方式
str1 \> str2 //比較大於,大於號需要轉義,避免被shell當成重定向符
str1 \< str2 //比較小於,小於號需要轉移,避免被shell當成重定向符
-n str1 //測試str1的長度是否為非0
-z str1 //測試長度是否為0
if [ -z $var ] //在這裡,若var未被定義,這裡也是可以執行的,只是var的長度為0, 故-z $var的退出碼為0
(3)檔案比較
-d file //檢查file是否存在且是一個目錄
-e file //檢查file 是否存在
-f file //檢查file是否是一個檔案
-r file //檢查file 是否存在並可讀
-s file //檢查file是否存在並非空
-w file //檢查file 是否存在並可寫
-x file //檢查file是否存在並可執行
-O file //檢查file是否存在並屬於當前使用者
-G file //檢查file是否存在並且預設組與當前使用者相同
file1 -nt file2 檢查file1是否比file2新
file1 -ot file2 檢查file1是否比 fil2舊
3.複合條件測試
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
4.if-then 的高階特性
針對數學運算子的高階特性
(( expression )) ,支援除了上面以外的其他運算子
val++ 後增
val-- 後減
++val 先增
--val 先減
! 邏輯求反
~ 位求反
** 冪運算
<< 左位移
>> 右位移
& 位布林求反
| 位布林或
&& 邏輯和
|| 邏輯或
針對字串比較的高階特性
[[ expression ]],兩邊有空格
5.case命令
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) commands;;
1. if-then 語句
基本格式:
if command //若command命令執行完畢之後的狀態碼返回值為0,則執行then中的命令,否則 不執行then中的命令
then
commands
fi
if command;then //另一種格式
commands
fi
else 格式
if command;then //如果command中命令返回的退出狀態碼為0,則執行then
commands
else
commands //如果command中命令返回的退出狀態碼為非0,則執行else
fi
elif 格式
if command;then
commands
elif command;then
commands
elif command;then
commands
else
commands
fi
2. test命令
if test condition;then //如果condition條件不寫,則以非零狀態碼退出,執行else中的 commands
commands
else
commands
fi
(1) my_variable="full"; test $my_variable //若變數my_variable為空,則退出碼為非0,若有內容,則為0
方括號的表達形式
if [ condition ] //使用方括號來代替test,但是在方括號的兩邊必須具有空格
then
commands
fi
通常test可以測試三類條件
(1)數值比較
n1 -eq n2 //是否相等,相等,則退出碼為0
n1 -ge n2 //是否大於或等於
n1 -gt n2 //是否大於
n1 -le n2 //是否小於等於
n1 -lt n2 //是否小於
n1 -ne n2 //不等於
其中n1 和 n2 可以使用變數,例如有變數var ,可以 $var -ne n2 這樣使用,這種比較不能使用在浮點數中
(2)字串比較
str1 = str2 //比較是否相等,透過ASCII表來比較,因此會比較標點,大小寫等
str1 != str2 //比較是否不相等 等號兩邊留空格,也可以使用變數的方式
str1 \> str2 //比較大於,大於號需要轉義,避免被shell當成重定向符
str1 \< str2 //比較小於,小於號需要轉移,避免被shell當成重定向符
-n str1 //測試str1的長度是否為非0
-z str1 //測試長度是否為0
if [ -z $var ] //在這裡,若var未被定義,這裡也是可以執行的,只是var的長度為0, 故-z $var的退出碼為0
(3)檔案比較
-d file //檢查file是否存在且是一個目錄
-e file //檢查file 是否存在
-f file //檢查file是否是一個檔案
-r file //檢查file 是否存在並可讀
-s file //檢查file是否存在並非空
-w file //檢查file 是否存在並可寫
-x file //檢查file是否存在並可執行
-O file //檢查file是否存在並屬於當前使用者
-G file //檢查file是否存在並且預設組與當前使用者相同
file1 -nt file2 檢查file1是否比file2新
file1 -ot file2 檢查file1是否比 fil2舊
3.複合條件測試
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
4.if-then 的高階特性
針對數學運算子的高階特性
(( expression )) ,支援除了上面以外的其他運算子
val++ 後增
val-- 後減
++val 先增
--val 先減
! 邏輯求反
~ 位求反
** 冪運算
<< 左位移
>> 右位移
& 位布林求反
| 位布林或
&& 邏輯和
|| 邏輯或
針對字串比較的高階特性
[[ expression ]],兩邊有空格
5.case命令
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) commands;;