#前言:在shell腳本中,有各種的表達(dá)式,包括有條件測(cè)試表達(dá)式,文件表達(dá)式,字符串表達(dá)式,整數(shù)表達(dá)式,接下來(lái)我們來(lái)了解一下他們的使用方法 1.條件測(cè)試表達(dá)式#首先來(lái)看一下條件測(cè)試語(yǔ)法 #條件測(cè)試語(yǔ)法 #說(shuō)明1.test <測(cè)試表達(dá)式> test命令和后面<內(nèi)容>之間至少有一個(gè)空格2.[ <測(cè)試表達(dá)式> ] 單中括號(hào)進(jìn)行條件測(cè)試表達(dá)式,[]的邊界和內(nèi)容之間至少要有一個(gè)空格3.[[ <測(cè)試表達(dá)式> ]] 雙括號(hào),[[]]的邊界和內(nèi)容也是要有空格4.((<測(cè)試表達(dá)式>)) 雙小括號(hào),兩端不用空格 #注意點(diǎn) 1、語(yǔ)法1中的test命令和語(yǔ)法2中的[]是等價(jià)的。語(yǔ)法3中的[[]]為擴(kuò)展的test命令,語(yǔ)法4中的(())常用于計(jì)算 2、在[]中可以使用通配符等進(jìn)行模式匹配,這是其區(qū)別其他集中語(yǔ)法格式的地方 3、&&、||、>、<等操作符可以應(yīng)用于[[]]中,但不能應(yīng)用于[]中,在[]中一般用-a、-o、-gt(用于整數(shù))、-lt(用于整數(shù))代替上述操作符 4、對(duì)于整數(shù)的關(guān)系運(yùn)算,也可以使用shell的算術(shù)運(yùn)算符(()) #詳解 #1.1.test條件測(cè)試的語(yǔ)法和使用 #查看幫助:man test #介紹:test - check file types and compare values(檢查文件類型和比較值) #語(yǔ)法格式:test <測(cè)試表達(dá)式> #test的幫助文檔 [root@shell ~]# man test > 1.txt [root@shell ~]# cat 1.txt #使用 #例一:判斷如果file文件存在且為一個(gè)文件,就輸出true,否則輸出false
#例二:使用-z選項(xiàng)(如果測(cè)試字符串的長(zhǎng)度為0,則表達(dá)式成立)
#1.2.[]中括號(hào)條件測(cè)試語(yǔ)法和使用 #語(yǔ)法格式:[ <測(cè)試表達(dá)式> ] #注意點(diǎn):中括號(hào)內(nèi)部的兩端都要有空格,[]和test用法一樣,test的判斷選項(xiàng)也可以在[]中用 #輸入兩端都有空格的技巧:先輸入一對(duì)中括號(hào),然后退一個(gè)格,輸入兩個(gè)空格,再退一個(gè)格 #例子:利用[]加-f選項(xiàng)(如果文件存在且為普通文件則表達(dá)式就成立)
#1.3.[[]] 雙中括號(hào)條件測(cè)試語(yǔ)法及使用 #語(yǔ)法格式:[[ <測(cè)試表達(dá)式> ]] #注意點(diǎn):雙中括號(hào)的兩端需要有空格 #例子:判斷文件存在且為一個(gè)普通文件
#1.4.特殊條件測(cè)試表達(dá)式例子 #判斷條件測(cè)試表達(dá)式的條件成立或不成立后,還需要執(zhí)行多條命令語(yǔ)句的語(yǔ)法,不用if測(cè)試表達(dá)式的格式 #當(dāng)條件1成立時(shí),同時(shí)執(zhí)行多條命令
#例子:當(dāng)條件成立的時(shí)候就執(zhí)行后面的命令
#上面的判斷相當(dāng)于下面if語(yǔ)句的效果 if [ 條件1 ];then 命令1 命令2fi #關(guān)于條件測(cè)試表達(dá)式的總結(jié) #1.test和[]、[[]]的功能有所重合,因此在工作中選擇一種適合自己的一種用,其他的可以看懂別人的寫的腳本就好了,可以同man test查看更多參數(shù)用法 #2.測(cè)試表達(dá)式test、[]、[[]]、(())區(qū)別總結(jié)
2.文件表達(dá)式#常用的文件測(cè)試操作符 #常用操作符 #說(shuō)明-f 文件,全稱file #文件存在且為普通文件則為真,表達(dá)式成立-d 文件,全稱directory #文件存在且為目錄則為真,表達(dá)式成立-s 文件,全稱size #文件存在且大小不為0為真-e 文件,全稱exist #文件存在則為真-r 文件,全稱read #文件存在且為可讀則為真,表達(dá)式成立-w 文件,全稱write #文件存在且可寫為真,表達(dá)式成立-x 文件,全稱executable #文件存在且可執(zhí)行為真-L 文件,全稱link #文件存在且為鏈接文件為真f1 -nt f2,英文newer than #文件f1比文件f2新則為真,根據(jù)文件修改時(shí)間計(jì)算f1 -ot f2,英文older than #文件f1比文件f2舊為真,根據(jù)修改時(shí)間計(jì)算 #例子:#1.-f,判斷文件是否存在且為普通文件
#2.-d,判斷文件是否存在且為目錄
#3.測(cè)試文件屬性:r,w,x
#測(cè)試時(shí)變量的特殊寫法及問(wèn)題 #用[]測(cè)試變量時(shí),如果被測(cè)試的變量不加雙引號(hào),那么測(cè)試結(jié)果可能會(huì)是不正確的 #例子
#注意點(diǎn):做測(cè)試判斷時(shí),不一定非要按照前面的如果成立了輸出什么,不成立輸出什么,可以直接做部分判斷
3.字符串表達(dá)式#字符串表達(dá)式作用:比較兩個(gè)字符串是否相同、測(cè)試字符串的長(zhǎng)度是否為0、字符串是否為null等 #常用的字符串測(cè)試操作符 #常用字符串操作符 #說(shuō)明-z '字符串' 如果字符串長(zhǎng)度為0則為真,-n '字符串' 如果字符串長(zhǎng)度不為0則為真,'字符串1' = '字符串2' 如果字符串1等于字符串2則為真,可以使用==代替='字符串1' != '字符串2' 如果字符串1不等于字符串2則為真,不能使用!==代替!= #提示: #1.上面的字符串測(cè)試操作符必須要有''引起來(lái) #2.比較符號(hào)兩端要有空格 #3.-n 比較字符串長(zhǎng)度是否不為0,如果不為0則為真,用法 [ -n '$my' ] #4.-z 比較字符串長(zhǎng)度是否為0,如果為0則為真,用法 [ -z '$my' ] #例1:-n,-z參數(shù)應(yīng)用
#例二:進(jìn)行字符串比較時(shí),如果等號(hào)兩端沒(méi)有空格帶來(lái)的問(wèn)題
[root@shell ~]# [ 'abc' = '1' ]&& echo 1 || echo 0 0 #正?,F(xiàn)象 #總結(jié):字符串比較時(shí)若等號(hào)兩端沒(méi)有空格,則會(huì)導(dǎo)致判斷出現(xiàn)邏輯錯(cuò)誤,即使語(yǔ)句沒(méi)有問(wèn)題,但是結(jié)果依然可能不對(duì) #例三:字符串不加引號(hào)可能帶來(lái)的問(wèn)題
[root@shell ~]# [ -n $var ] && echo 1 || echo 01 #不加雙引號(hào)導(dǎo)致返回結(jié)果錯(cuò)誤[root@shell ~]# [ -z '$var' ]&& echo 1 || echo 01 #-z是字符串長(zhǎng)度為0,則為真 #查看有關(guān)雙引號(hào)和等號(hào)兩端空格的生產(chǎn)系統(tǒng)標(biāo)準(zhǔn)
4.整數(shù)表達(dá)式#整數(shù)二元比較操作符 在test及[]中使用的比較符號(hào) 在[[]]和(())中使用的比較符號(hào) 說(shuō)明-eq == 或 = 相等,全稱equal-ne != 不相等,全稱not qeual-gt > 大于,全稱greater than-ge >= 大于等于,全稱為greater equal-lt < 小于,全稱less than-le <= 小于等于,全稱less equal #注意:'<'和'>'在[]中括號(hào)里面需要轉(zhuǎn)義,對(duì)于數(shù)字不轉(zhuǎn)義的結(jié)果可能不會(huì)報(bào)錯(cuò),但是結(jié)果可能不對(duì),=和!=在[]不用轉(zhuǎn)義 #例子
#整數(shù)比較的推薦用法,使用-eq,-lt,-gt #例子 [root@shell ~]# [ 13 -lt 24 ] && echo 1 1 #13小于24結(jié)果為真就輸出1 5.邏輯操作符#常用的邏輯操作符 在test及[]中使用的比較符號(hào) 在[[]]和(())中使用的比較符號(hào) 說(shuō)明 -a && and,且,兩端都為真,則結(jié)果為真 -o || or,或,兩端有一個(gè)為真,則結(jié)果為真 ! ! not,非,兩端相反,則結(jié)果為真 #提示
#提示:中括號(hào)里面不能使用&&字符串,否則報(bào)錯(cuò),在[[]]和(())里面就可以用,可參考上面列出的 [root@shell ~]# [ -f '$f1' && -f '$f2' ] && echo 1 || echo 0-bash: [: missing `]'0 #例一:
#例二:
|
|
來(lái)自: 啟云_9137 > 《計(jì)算機(jī)及軟件應(yīng)用》