天天看點

條件測試判斷

條件測試文法:

        在bash的各種流程控制結構中通常要進行各種測試,然後根據測試結果執行不同的操作,有時也會通過與if等條件語句相結合,讓我們可以友善的按成判斷。

格式1:test<測試表達式>

格式2:[<測試表達式>]

格式3:[[<測試表達式>]]

說明:

格式1和格式2是等價的

格式3為擴充的test指令,有網友推薦用格式3

提示:

在[[]]中可以使用通配符進行模式比對。&&,||,>,<等操作符可以應用于[[]]中,但不能應用[]中。

對整數進行關系運算,也可以使用shell的算術運算符(())

文法例子:

範例1:test測試檔案

<code>[root@XCN ~]</code><code># test -f file&amp;&amp; echo 1||echo 0  </code>

<code>0</code>

<code>[root@XCN ~]</code><code># test -f file &amp;&amp; echo true||echo false</code>

<code>false</code>

範例2:test指令非(!)的寫法

<code>[root@XCN ~]</code><code># test ! -f file &amp;&amp; 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 ]&amp;&amp; echo 1||echo 0</code>

<code>[root@XCN ~]</code><code># touch file </code>

<code>1</code>

<code>[root@XCN ~]</code><code># [ ! -f file ]&amp;&amp; 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 ]]&amp;&amp; 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 ] &amp;&amp; echo 1 ||echo 0     #-f  檔案存在</code>

<code>[root@XCN 03]</code><code># [ -d xcn ] &amp;&amp; echo 1 ||echo 0      #-d  目錄</code>

<code>[root@XCN 03]</code><code># [ -e xcn ] &amp;&amp; echo 1 ||echo 0      #-e  不管什麼存在則會真</code>

<code>[root@XCN 03]</code><code># [ -d tom ] &amp;&amp; echo 1|| echo 0</code>

<code>[root@XCN 03]</code><code># [ -s xcn ] &amp;&amp; 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" ] &amp;&amp; echo 1|| echo 0</code>

<code>[root@XCN ~]</code><code># [ "abc" == "abs" ] &amp;&amp; echo 1||echo 0</code>

<code>[root@XCN ~]</code><code># [ "abc" == "abc" ] &amp;&amp; echo 1||echo 0 </code>

<code>[root@XCN ~]</code><code># [ "abc" != "abc" ] &amp;&amp; echo 1||echo 0 </code>

整數二進制比較操作符:

在[]中使用的比較符

在(())和[[]]中使用的比較符

-eq

==

equal的縮寫,相等

-ne

!=

not equal的縮寫,不相等

-gt

&gt;

大于greater than

-ge

&gt;=

大于等于greater equal

-lt

&lt;

小于類似less than

-le

&lt;=

小于等于less equal

1)"&lt;"符号意思是大于,if[["$a"&lt;"$b"]],if["$a"\&lt;"$b"].在單[]中需要轉義,因為shell也用&lt;和&gt;重定向。

2)“&gt;”符号意思是大于,if [["a"&gt;"$b"]]   if["$a"\&gt;"$b"]在單[]中需要轉義,因為shell也用&lt;和&gt;重定向

3)"="符号意思是等于,if[["$a"="$b"]]  if["$a"="$b"]在單[]中不需要轉義

特别提示:

        經過實戰,"="和"!="在[]中使用不需要轉義,包含"&gt;"和"&lt;"的符号在[]中使用需要轉義,對于資料不轉義的結果未必會報錯,但是結果可能不會對

範例1:二進制數字比較

<code>[root@XCN ~]</code><code># [ 12 -eq 13 ]&amp;&amp; echo 1||echo 0</code>

<code>[root@XCN ~]</code><code># [ 12 -gt 13 ]&amp;&amp; echo 1||echo 0  [root@XCN ~]# [ 12 \&lt; 13 ]&amp;&amp; echo 1||echo 0   </code>

<code>[root@XCN ~]</code><code># [ 12 \&gt; 13 ]&amp;&amp; echo 1||echo 0   </code>

<code>[root@XCN ~]</code><code># [ 12 -lt 13 ]&amp;&amp; echo 1||echo 0 </code>

<code>[root@XCN ~]</code><code># [ 12 = 13 ]&amp;&amp; echo 1||echo 0  </code>

邏輯操作符

在[]中使用的邏輯操作符

在[[]]中使用的邏輯操作符

-a

&amp;&amp;

and與,兩端都為真,則真

-o

||

or或,兩端有一個為真則真

!

not非,相反則為真

!    中文意思是反:與一個邏輯值相反的邏輯值

-a   中文意思是與(and &amp;&amp;):兩個邏輯值都為"真",傳回值才為"真"反之為"假"

-o   中文意思是或(or):兩個邏輯值隻要有一個為"真",傳回值就為"真"

<code>[root@XCN ~]</code><code># n1=12;n2=13</code>

<code>[root@XCN ~]</code><code># [[ $n1 -eq $n2 &amp;&amp; -z "$1" ]]&amp;&amp;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

[[]]中用&amp;&amp;,-o,!

test用法和[]相同

本文轉自 baishuchao 51CTO部落格,原文連結:http://blog.51cto.com/baishuchao/1942460

繼續閱讀