第二天:條件測(cè)試表達(dá)式

3.1 shell的條件測(cè)試

條件測(cè)試,作用是驗(yàn)證條件是否符合預(yù)期。以下是常用語法

條件測(cè)試語法 說明
語法1:test <測(cè)試表達(dá)式> 利用test命令測(cè)試條件表達(dá)式。test命令和” <測(cè)試表達(dá)式>”之間至少有一個(gè)空格
語法2:[ <測(cè)試表達(dá)式> ] 通過[](單中括號(hào))測(cè)試條件表達(dá)式的方法,和test命令的用法相同,注意[]的邊界和內(nèi)容之間至少有一個(gè)空格
語法3:[[ <測(cè)試表達(dá)式> ]] 通過[[]](雙中括號(hào))測(cè)試條件表達(dá)式的值的方法,是比test和[]更新的語法格式。[[]]的邊界和內(nèi)容之間至少有一個(gè)空格
語法4:((測(cè)試表達(dá)式)) 通過(())(雙小括號(hào))進(jìn)行測(cè)試條件表達(dá)式的方法,一般用于if語句里。(())雙小括號(hào)兩段不需要有空格

針對(duì)以上表有幾個(gè)注意事項(xiàng)需要說明:

  • ? 語法1中的test命令和語法2中的[]是等價(jià)的。語法3中的[[]]為擴(kuò)展的test命令,語法4中的(())命令常用于計(jì)算,建議在生產(chǎn)環(huán)境中使用相對(duì)友好的語法2,即中括號(hào)[]的語法
  • ? 在雙中括號(hào)[[]]中可以使用通配符(如*)等進(jìn)行模式匹配,這是區(qū)別于其他幾種語法的地方
  • ? &&、||、>、<等操作符可以應(yīng)用到[[]]中,但不能應(yīng)用于[]中,在[]中一般用-a、-o、-gt、-lt取代
  • ? 對(duì)于整數(shù)的關(guān)系運(yùn)算,也可以使用Shell的算術(shù)運(yùn)算符(())
  • ? 條件測(cè)試簡單語法示例
    n test條件測(cè)試語句示例
第一張.jpeg

n []條件測(cè)試語句示例


第二年.jpeg
  • ? 特殊的條件測(cè)試表達(dá)式語句,可以執(zhí)行多個(gè)命令
[ 條件1 ] && {
命令1
命令2
...
}
[[ 條件1 ]] && {
命令1
命令2
...
}
test 條件1 && {
命令1
命令2
...
}

3.2 文件測(cè)試表達(dá)式

對(duì)于文件測(cè)試表達(dá)式中,常用的文件測(cè)試操作符如下所示:

類型 說明
[ -f file ],f的全稱為file 文件存在
[ -e file ],e的全稱為exist 文件(夾)存在
[ -d dir ],d的全稱為directory 是目錄
[ -L file ],L的全稱為link 是軟鏈接
[ -s file ],s的全稱為size 文件存在且非空
[ -S file ],S的全稱為Socket 文件是Socket文件
[ -r file ],r的全稱為read 文件可讀
[ -w file ],w的全稱為write 文件可寫
[ -x file ],x的全稱為executable 文件可執(zhí)行

練習(xí):
以腳本傳參和read讀入的方式輸入兩個(gè)文件路徑,任意一個(gè)文件不存在,則提示用戶第幾個(gè)文件不存在,并退出腳本(兩個(gè)腳本)

# 第一個(gè)文件不存在,則
[ -f $1 ] || {
echo "第一個(gè)文件不存在"
exit
}
 # 第二個(gè)文件不存在,則

注:建議大家:在腳本的健壯性為前提下,重復(fù)的代碼盡量簡化

3.3 字符串測(cè)試表達(dá)式

字符串測(cè)試表達(dá)式的作用:比較兩個(gè)字符是否相同、測(cè)試字符串的長度是否為0、字符串是否為NULL等,常用的字符串操作符如下所示:

表達(dá)式 說明
[ “a” = “b” ] 測(cè)試字符串是否相等。用作賦值時(shí)兩邊不能有空格,用做判斷時(shí)必須有空格。
[ “a” != “b” ] 測(cè)試字符串是否不相等
[ -n “$str” ] 判斷字符串是否非空
[ -z “$str” ] 判斷字符串是否為空
[ $str ] 判斷字符串是否非空,類似于 -n

注意:對(duì)于字符串測(cè)試的時(shí)候,一定要把字符串加雙引號(hào),如[ -n “myvar” ]、[ “a =b” ]

3.4 整數(shù)二元比較操作符

整數(shù)二元比較操作符使用參考

在[]以及test中使用的比較符號(hào) 在(())和[[]]中使用的比較符號(hào) 說明
-eq ==或= 相等的英文equal
-ne != 不相等的英文not equal
-gt > 大于的英文greater than
-ge >= 大于等于的英文greater equal
-lt < 小于的英文less than
-le <= 小于等于的英文less equal

注意:不推薦使用[[]]和>、<等符號(hào)比較數(shù)字,因?yàn)樵诖笮”容^中,[[]]比較的是字符串的arscII碼
有關(guān)[]、[[]]、(())用法小結(jié)

  • ? 整數(shù)加雙引號(hào)比較也可以
  • ? [[]]中使用類似-eq的寫法是正確的,而[[]]中用類似>、<的寫法也可能不對(duì),有可能值比較第一位,原因在于arscII碼的特殊性
  • ? [[]]中用類似>、<的寫法語法沒錯(cuò)(經(jīng)過轉(zhuǎn)義),但是邏輯結(jié)果不對(duì),使用=、!=可以正確比較
  • ? (())中不能使用類似-eq的寫法,可以使用類似>、<、==(=不可以)的寫法
  • ? oldchang傾力推薦:在比較數(shù)字的時(shí)候推薦使用[]和-gt、-lt等類似的搭配,或者使用(())和>、<等搭配

3.5 邏輯操作符

在[]和test中使用操作符 在[[]]和(())中使用操作符 說明
-a && and,與運(yùn)算,兩端都真則為真
-o || or,或運(yùn)算,兩端有一個(gè)為真則真
! ! not,非,相反為真

注意,連接兩個(gè)含有[]、test或者[[]]的表達(dá)式用&&、||

?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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