Bash編程003——條件語句1
Shell提供了一系列的條件測試來處理程序執(zhí)行過程中的各種情況缎患,并做進(jìn)一步的操作葬馋。
條件測試
Shell提供了一組測試運(yùn)算符杉女,通過這些運(yùn)算符壹哺,Shell程序能夠判斷條件是否成立垢啼。條件測試在各種流程控制語句窜锯,如判斷語句和循環(huán)語句中發(fā)揮著重要的作用。
在shell中提供了兩個(gè)內(nèi)置命令"["和test用于計(jì)算條件表達(dá)式的值芭析,"["和test其實(shí)是同義詞锚扎,區(qū)別在于使用"["時(shí)必須最后用"]"匹配。
簡單的示例:
var=10086
# 注意這里[ ]兩側(cè)必須有空格
if [ $var -eq 10086 ]
then
echo var is 10086
else
echo var is not 10086
fi
var=10010
if test $var -eq 10010
then
echo var is 10010
else
echo var is not 10010
fi
注意:
值得一提的是馁启,在Shell程序中驾孔,條件測試的指定條件為真時(shí),返回值為0惯疙,否則返回非零值翠勉。這個(gè)設(shè)計(jì)剛好和C語言中的判斷相反,這主要是為了和Shell程序的退出狀態(tài)一致霉颠。當(dāng)Shell程序執(zhí)行成功后对碌,返回0;發(fā)生錯(cuò)誤蒿偎,則返回非零值朽们。
我們來驗(yàn)證一下,在Shell中$?是一個(gè)特殊的系統(tǒng)變量诉位,表示上一條語句執(zhí)行的返回值骑脱。
var=1
test $var -eq 1; echo $?
test $var -eq 2; echo $?
執(zhí)行結(jié)果如下所示:
test命令的使用
文件操作符:
test -a FILE 測試文件是否存在
test -b FILE 測試文件是否是塊特殊文件
test -c FILE 測試文件是否是字符特殊文件
test -d FILE 測試文件是否是目錄
test -e FILE 測試文件是否存在
test -f FILE 測試文件是否存在并且是普通文件
test -g FILE 測試文件是否設(shè)置了組ID
test -h FILE 測試文件是否是符號(hào)鏈接
test -L FILE 測試文件是否是符號(hào)鏈接
test -k FILE 測試文件是否設(shè)置了sticky位
test -p FILE 測試文件是否是命名管道
test -r FILE 測試文件是否是對(duì)當(dāng)前用戶可讀
test -s FILE 測試文件是否存在且非空
test -S FILE 測試文件是否是socket
test -t FD 測試FD是否在終端中打開了
test -u FILE 測試文件是否設(shè)置了用戶ID
test -w FILE 測試文件是否對(duì)當(dāng)前用戶可寫
test -x FILE 測試文件是否對(duì)當(dāng)前用戶可執(zhí)行
test -O FILE 測試文件是否是實(shí)際由你擁有
test -G FILE 測試文件是否是實(shí)際上由你所在的組擁有
test -N FILE 測試文件是否在最后字詞讀取后被修改了
test FILE1 -nt FILE2 根據(jù)最后修改時(shí)間判斷FILE1是否比FILE2更新
字符串操作符:
test -z STRING 字符串是否非空
test -n STRING
test STRING1 = STRING2 字符串是否相等
test STRING1 != STRING2 字符創(chuàng)是否不等
test STRING1 < STRING2 按照字母表順序,STRING1是否小于STRING2
test STRING1 > STRING2 按照字母表順序苍糠,STRING1是否大于STRING2
整數(shù)操作符:
test number1 -eq number2 是否相等
test number1 -ne number2 是否不等
test number1 -gt number2 number1是否大于number2
test number1 -lt number2 number是否小于number2
test number1 -ge number2 number1是否大于等于number2
test number1 -le number2 number是否小于等于number2
邏輯操作符:
test ! EXPR 對(duì)表達(dá)式取反
test EXPR1 -a EXPR2 相當(dāng)于and叁丧,兩個(gè)表達(dá)式都為真則為真
test EXPR1 -a EXPR2 相當(dāng)于or,有一個(gè)表達(dá)式為真即為真
別的操作符:
test -o OPTION shell選項(xiàng)OPTION是否允許
test -v VAR 是否設(shè)置了shell變量VAR
test -R VAR 是否設(shè)置了shell變量VAR,且VAR是一個(gè)名字引用