條件測試文法:
在bash的各種流程控制結構中通常要進行各種測試,然後根據測試結果執行不同的操作,有時也會通過與if等條件語句相結合,讓我們可以友善的按成判斷。
格式1:test<測試表達式>
格式2:[<測試表達式>]
格式3:[[<測試表達式>]]
說明:
格式1和格式2是等價的
格式3為擴充的test指令,有網友推薦用格式3
提示:
在[[]]中可以使用通配符進行模式比對。&&,||,>,<等操作符可以應用于[[]]中,但不能應用[]中。
對整數進行關系運算,也可以使用shell的算術運算符(())
文法例子:
範例1:test測試檔案
<code>[root@XCN ~]</code><code># test -f file&& echo 1||echo 0 </code>
<code>0</code>
<code>[root@XCN ~]</code><code># test -f file && echo true||echo false</code>
<code>false</code>
範例2:test指令非(!)的寫法
<code>[root@XCN ~]</code><code># test ! -f file && echo true||echo false</code>
<code>true</code>
<code>[root@XCN ~]</code><code># touch file</code>
範例[]
<code>[root@XCN ~]</code><code># rm -f file </code>
<code>[root@XCN ~]</code><code># [ -f file ]&& echo 1||echo 0</code>
<code>[root@XCN ~]</code><code># touch file </code>
<code>1</code>
<code>[root@XCN ~]</code><code># [ ! -f file ]&& echo 1||echo 0</code>
<code>[root@XCN ~]</code><code># rm file </code>
<code>rm</code><code>: remove regular empty </code><code>file</code> <code>`</code><code>file</code><code>'? y</code>
<code>[root@XCN ~]</code><code># [[ -f file ]]&& echo 1||echo 0</code>
檔案測試操作符
常用檔案測試操作符号
說明
-f 檔案 file
若檔案存在且為普通檔案則真
-d 檔案 directory
若檔案存在且為目錄檔案則真
-s 檔案 size
若檔案存在且不為空(檔案大小非0則真)
-e 檔案exist
若檔案存在則真,要差別-f
-r 檔案 read
若檔案存在且可讀則真
-w 檔案 write
若檔案存在且寫則真
-x 檔案 excute
若檔案存在且可執行則真
-L 檔案 link
若檔案存在且為連結檔案則真
f1 -nt f2 newer than
若檔案f1比檔案f2新則真
f1 -ot f2 older than
若檔案f1比檔案f2舊則真
舉例:
<code>[root@XCN 03]</code><code># touch xcn</code>
<code>[root@XCN 03]</code><code># [ -f xcn ] && echo 1 ||echo 0 #-f 檔案存在</code>
<code>[root@XCN 03]</code><code># [ -d xcn ] && echo 1 ||echo 0 #-d 目錄</code>
<code>[root@XCN 03]</code><code># [ -e xcn ] && echo 1 ||echo 0 #-e 不管什麼存在則會真</code>
<code>[root@XCN 03]</code><code># [ -d tom ] && echo 1|| echo 0</code>
<code>[root@XCN 03]</code><code># [ -s xcn ] && echo 1||echo 0 #-s 針對檔案的</code>
字元串測試操作符
字元串測試操作符的作用:比較兩個字元串是否相同,字元串長度是否為零,字元串是否為NULL(注:bash分區零長度字元串和空字元串)等。
"="比較兩個字元串是否相同,與=等價,如if[ "$a"="$b" ],其中$a這樣的變量最好用""括起來,因為如果中間有空格,*等符号就可能出錯了,當然更好的方法就是["${a}"="${b}"]."!="比較兩個字元串是否相同,不同則為"是"
常用字元串測試操作符
-z "字元串"
若串長度為0則真,-z可以了解為zero
-n "字元串"
若串長度不為0則真,-n可以了解為no zero
"串 1"="串2"
若串1等于串2則真,可使用"=="代替"="
"串 1"!="串2"
若串1不等于串2則真。但不能用"!=="代替"!="
字元串測試操作符提示:
1)-n比較字元串長度是否不為零,如果不為零則為真,如:[-n "$myvar"]
2)-z比較字元串長度是否等于零,如果等于零則為真,如:[-z "$myvar"]
特别注意,對于以上表格中的字元串測試操作符号,如[-n "$myvar"],要把字元串用''引起來
<code>[root@XCN ~]</code><code># [ -n "test" ] && echo 1|| echo 0</code>
<code>[root@XCN ~]</code><code># [ "abc" == "abs" ] && echo 1||echo 0</code>
<code>[root@XCN ~]</code><code># [ "abc" == "abc" ] && echo 1||echo 0 </code>
<code>[root@XCN ~]</code><code># [ "abc" != "abc" ] && echo 1||echo 0 </code>
整數二進制比較操作符:
在[]中使用的比較符
在(())和[[]]中使用的比較符
-eq
==
equal的縮寫,相等
-ne
!=
not equal的縮寫,不相等
-gt
>
大于greater than
-ge
>=
大于等于greater equal
-lt
<
小于類似less than
-le
<=
小于等于less equal
1)"<"符号意思是大于,if[["$a"<"$b"]],if["$a"\<"$b"].在單[]中需要轉義,因為shell也用<和>重定向。
2)“>”符号意思是大于,if [["a">"$b"]] if["$a"\>"$b"]在單[]中需要轉義,因為shell也用<和>重定向
3)"="符号意思是等于,if[["$a"="$b"]] if["$a"="$b"]在單[]中不需要轉義
特别提示:
經過實戰,"="和"!="在[]中使用不需要轉義,包含">"和"<"的符号在[]中使用需要轉義,對于資料不轉義的結果未必會報錯,但是結果可能不會對
範例1:二進制數字比較
<code>[root@XCN ~]</code><code># [ 12 -eq 13 ]&& echo 1||echo 0</code>
<code>[root@XCN ~]</code><code># [ 12 -gt 13 ]&& echo 1||echo 0 [root@XCN ~]# [ 12 \< 13 ]&& echo 1||echo 0 </code>
<code>[root@XCN ~]</code><code># [ 12 \> 13 ]&& echo 1||echo 0 </code>
<code>[root@XCN ~]</code><code># [ 12 -lt 13 ]&& echo 1||echo 0 </code>
<code>[root@XCN ~]</code><code># [ 12 = 13 ]&& echo 1||echo 0 </code>
邏輯操作符
在[]中使用的邏輯操作符
在[[]]中使用的邏輯操作符
-a
&&
and與,兩端都為真,則真
-o
||
or或,兩端有一個為真則真
!
not非,相反則為真
! 中文意思是反:與一個邏輯值相反的邏輯值
-a 中文意思是與(and &&):兩個邏輯值都為"真",傳回值才為"真"反之為"假"
-o 中文意思是或(or):兩個邏輯值隻要有一個為"真",傳回值就為"真"
<code>[root@XCN ~]</code><code># n1=12;n2=13</code>
<code>[root@XCN ~]</code><code># [[ $n1 -eq $n2 && -z "$1" ]]&&echo 1||echo 0</code>
test指令測試:
<code>[root@XCN ~]</code><code># test -f $f1|echo 1|echo 0</code>
<code>[root@XCN ~]</code><code># test -f "$f1"|echo 1|echo 0</code>
<code>[root@XCN ~]</code><code># test -z "$f1"|echo 1|echo 0 </code>
<code>[root@XCN ~]</code><code># test -z $f1|echo 1|echo 0 </code>
小結:邏輯操作符使用總結
[]中用-a,-o
[[]]中用&&,-o,!
test用法和[]相同
本文轉自 baishuchao 51CTO部落格,原文連結:http://blog.51cto.com/baishuchao/1942460