1 15比較與測試

2021-09-20 19:31:45 字數 3532 閱讀 3270

常用的比較有:算術比較、字串比較。測試 通常是進行 檔案系統相關的測試

邏輯運算子:

&& :邏輯與

|| :邏輯或

! :邏輯非

-a :邏輯與

-o :邏輯或

-a和-o不可以用雙中括號,否則報錯; && 和 || 沒有限制

1

2

3

4

5

6

7

[root@localhosttest]# if [[ c = b || abc = abc ]];then echo equal;fi

equal

[root@localhosttest]# if [[ c = b -o abc = abc ]];then echo equal;fi

-bash: syntax errorinconditional expression

-bash: syntax error near `-o'

[root@localhosttest]# if [ c = b -o abc = abc ];then echo equal;fi

equal

算術比較:

格式:[ $var 操作符 num ]  各個變數以及符號旁邊都有空格

操作符有以下幾種:

-eq :等於

-ne :不等於

-gt :大於

-lt :小於

-ge :大於等於

-le :小於等於

字串比較:

格式:[[ $str1 操作符 $str2 ]]

操作符有以下幾種:

=  字串是否相等,相等為真

== 和 =一樣

!= 不等為真

>  大於為真

<  小於為真

字串測試:

[[ -z $str ]] str是空字串,返回真

[[ -n $str ]] str非空,返回真

例:    

1

2

[root@localhosttest]# a=' ';if [[ -n $a ]];then echo not empty;fi

not empty

1

2

3

4

5

6

[root@localhosttest]# a='';if [[ -z $a ]];then echo empty;fi

empty

[root@localhosttest]# a="";if [[ -z $a ]];then echo empty;fi

empty

[root@localhosttest]# a=" ";if [[ -n $a ]];then echo not empty;fi

not empty

檔案系統相關測試:

格式:  [ 操作符 $var ]   

操作符有以下:

-f   若$var 是檔案為真

-x   若$var 可執行為真

-d   若$var 是目錄為真

-e   若$var 檔案存在為真

-c   若$var 是字元裝置檔案為真

-b   若$var 是塊裝置檔案為真

-w   若$var 檔案可寫為真

-r   若$var 檔案可讀為真

-l   若$var 是鏈結檔案為真

總結:除了邏輯運算子-a和-o不可以用雙括號外,其他無限制,不過建議都用單括號,並且括號中的字串變數建議都加雙引號。像下面這樣

1

2

3

if[ -z"$hostname"-o"$hostname"="(none)"];

if[ ! -d/proc/bus/usb];

if[ -e"/selinux/enforce"] && ["$(cat /proc/self/attr/current)"!="kernel"];

從上面的例子中發現似乎-a和-o是多用於連線乙個中括號內的內容;&&和||多用於連線多個中括號時使用。

事實證明-a和-o不能用於連線多個中括號,從下面的例子中可看出。

1

2

3

4

[root@localhost aa]# if [ 1 -eq 1 ] -a [ 2 -eq 2 ];then echo equal;fi

-bash: [: too many arguments

[root@localhost aa]# if [ 1 -eq 1 ] && [ 2 -eq 2 ];then echo equal;fi

equal

Shell指令碼的條件測試與比較

shell指令碼的條件測試與比較 一 shell指令碼的條件測試 通常,在bash的各種條件結構和流程控制結構中都要進行各種測試,然後根據測試結構執行不同的操作,有時也會與if等條件語句相結合,來完成測試判斷,以減少程式執行的錯誤。執行條件測試表示式後通常會返回 真 或 假 就行執行命令後返回的值為...

Shell 測試比較

檔案狀態測試 b filename 當filename 存在並且是塊檔案時返回真 返回0 c filename 當filename 存在並且是字元檔案時返回真 d pathname 當pathname 存在並且是乙個目錄時返回真 e pathname 當由pathname 指定的檔案或目錄存在時返回...

NCQ與TCQ的區別及測試比較

ncq native command queuing 與tcq tagged command queuing 都是設計通過把計算機發向硬碟的指令做重新排序,從而提高硬碟效能的技術。ncq技術在 300mb s的serial ata ii規格中引入,針對的是主流的硬碟產品,而tcq技術是在scsi2規...