Bash編程3——條件語(yǔ)句(一)

Bash編程003——條件語(yǔ)句1

Shell提供了一系列的條件測(cè)試來(lái)處理程序執(zhí)行過(guò)程中的各種情況,并做進(jìn)一步的操作。

條件測(cè)試

Shell提供了一組測(cè)試運(yùn)算符,通過(guò)這些運(yùn)算符,Shell程序能夠判斷條件是否成立。條件測(cè)試在各種流程控制語(yǔ)句,如判斷語(yǔ)句和循環(huán)語(yǔ)句中發(fā)揮著重要的作用。

在shell中提供了兩個(gè)內(nèi)置命令"["和test用于計(jì)算條件表達(dá)式的值,"["和test其實(shí)是同義詞,區(qū)別在于使用"["時(shí)必須最后用"]"匹配。

簡(jiǎn)單的示例:

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程序中,條件測(cè)試的指定條件為真時(shí),返回值為0,否則返回非零值。這個(gè)設(shè)計(jì)剛好和C語(yǔ)言中的判斷相反,這主要是為了和Shell程序的退出狀態(tài)一致。當(dāng)Shell程序執(zhí)行成功后,返回0;發(fā)生錯(cuò)誤,則返回非零值。

我們來(lái)驗(yàn)證一下,在Shell中$?是一個(gè)特殊的系統(tǒng)變量,表示上一條語(yǔ)句執(zhí)行的返回值。

var=1
test $var -eq 1; echo $?
test $var -eq 2; echo $?

執(zhí)行結(jié)果如下所示:

2018-12-24_195321.png

test命令的使用

文件操作符:

test -a FILE 測(cè)試文件是否存在

test -b FILE 測(cè)試文件是否是塊特殊文件

test -c FILE 測(cè)試文件是否是字符特殊文件

test -d FILE 測(cè)試文件是否是目錄

test -e FILE 測(cè)試文件是否存在

test -f FILE 測(cè)試文件是否存在并且是普通文件

test -g FILE 測(cè)試文件是否設(shè)置了組ID

test -h FILE 測(cè)試文件是否是符號(hào)鏈接

test -L FILE 測(cè)試文件是否是符號(hào)鏈接

test -k FILE 測(cè)試文件是否設(shè)置了sticky位

test -p FILE 測(cè)試文件是否是命名管道

test -r FILE 測(cè)試文件是否是對(duì)當(dāng)前用戶(hù)可讀

test -s FILE 測(cè)試文件是否存在且非空

test -S FILE 測(cè)試文件是否是socket

test -t FD 測(cè)試FD是否在終端中打開(kāi)了

test -u FILE 測(cè)試文件是否設(shè)置了用戶(hù)ID

test -w FILE 測(cè)試文件是否對(duì)當(dāng)前用戶(hù)可寫(xiě)

test -x FILE 測(cè)試文件是否對(duì)當(dāng)前用戶(hù)可執(zhí)行

test -O FILE 測(cè)試文件是否是實(shí)際由你擁有

test -G FILE 測(cè)試文件是否是實(shí)際上由你所在的組擁有

test -N FILE 測(cè)試文件是否在最后字詞讀取后被修改了

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è)名字引用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容