1. if-then 語(yǔ)句
基本格式:
if command ? //若command命令執(zhí)行完畢之后的狀態(tài)碼返回值為0最盅,則執(zhí)行then中的命令尊搬,否則 ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不執(zhí)行then中的命令
then ?
? ? ? ? ? commands
fi
if command;then ? ? ? ? ?//另一種格式
? ? commands
fi
else 格式
if ?command;then ? ? //如果command中命令返回的退出狀態(tài)碼為0凡蚜,則執(zhí)行then
? ? ? commands
else?
? ? ? commands? ? //如果command中命令返回的退出狀態(tài)碼為非0,則執(zhí)行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條件不寫(xiě)聂使,則以非零狀態(tài)碼退出,執(zhí)行else中的 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?commands
? ? ? ? ?commands
else
? ? ? ? ? ? commands
fi?
(1) my_variable="full";? test? $my_variable? //若變量my_variable為空,則退出碼為非0,若有內(nèi)容坯辩,則為0
方括號(hào)的表達(dá)形式
if ?[ condition ] ? ?//使用方括號(hào)來(lái)代替test,但是在方括號(hào)的兩邊必須具有空格
then
? ? ?commands
fi
通常test可以測(cè)試三類(lèi)條件
(1)數(shù)值比較
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 ?這樣使用却音,這種比較不能使用在浮點(diǎn)數(shù)中
(2)字符串比較
? ? ? ? ? str1 = str2 ? ?//比較是否相等改抡,通過(guò)ASCII表來(lái)比較,因此會(huì)比較標(biāo)點(diǎn)系瓢,大小寫(xiě)等
? ? ? ? ? str1 != str2 ? //比較是否不相等 ?等號(hào)兩邊留空格阿纤,也可以使用變量的方式
? ? ? ? ? str1 \> str2 ? //比較大于,大于號(hào)需要轉(zhuǎn)義夷陋,避免被shell當(dāng)成重定向符
? ? ? ? ? str1 \< str2 //比較小于欠拾,小于號(hào)需要轉(zhuǎn)移,避免被shell當(dāng)成重定向符
? ? ? ? ? ? -n ?str1 ? ?//測(cè)試str1的長(zhǎng)度是否為非0
? ? ? ? ? ?-z ?str1 ? ?//測(cè)試長(zhǎng)度是否為0
? ?if [ -z ?$var ?] ? ? ? ? ? ? ? ? ? ?//在這里骗绕,若var未被定義藐窄,這里也是可以執(zhí)行的,只是var的長(zhǎng)度為0酬土, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?故-z ?$var的退出碼為0
(3)文件比較
-d ?file ? ? ? ? ? ? ?//檢查file是否存在且是一個(gè)目錄
-e file ? ? ? ? ? ?//檢查file 是否存在
-f ?file ? ? ? ? ? ? //檢查file是否是一個(gè)文件
-r ?file ? ? ? ? ? ? ?//檢查file ?是否存在并可讀
-s ?file ? ? ? ? ? ? //檢查file是否存在并非空
-w ?file ? ? ? ? ? //檢查file 是否存在并可寫(xiě)
-x ? ?file ? ? ? //檢查file是否存在并可執(zhí)行
-O ? file ? ? ? ? ?//檢查file是否存在并屬于當(dāng)前用戶(hù)
-G ?file ? ? ? ? ? ?//檢查file是否存在并且默認(rèn)組與當(dāng)前用戶(hù)相同
file1 ?-nt ? ?file2 ?檢查file1是否比f(wàn)ile2新
file1 ? -ot ? file2 ?檢查file1是否比 fil2舊
3.復(fù)合條件測(cè)試
[ condition1 ] ?&& [ condition2 ]
[ condition1 ] ? || ? ?[ condition2 ] ? ??
4.if-then 的高級(jí)特性
針對(duì)數(shù)學(xué)運(yùn)算符的高級(jí)特性
(( ? expression ?)) ?荆忍,支持除了上面以外的其他運(yùn)算符
val++ ? ? ? ?后增
val-- ? ? ? ? 后減
++val ? ? 先增
--val ? ? ?先減
! ? ? ? ?邏輯求反
~ ? ? ? 位求反
** ? ? 冪運(yùn)算
<< ? ?左位移
>> ? 右位移
& ? 位布爾求反
| ? ?位布爾或
&& ? 邏輯和
|| ? ?邏輯或
針對(duì)字符串比較的高級(jí)特性
[[ ?expression ?]],兩邊有空格
5.case命令
case ?variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) commands;;