天天看點

linux test 比較大小,Linux 比較判斷運算(if test)

介紹

本篇文章主要是列舉在shell指令中常出現的一些用來做比較的運算符,這些運算符是編寫shell腳本的基礎;

if else基本文法

1、基本文法:

if [ command ]; then

符合該條件執行的語句

fi

2、擴充文法:

if [ command ];then

符合該條件執行的語句

elif [ command ];then

符合該條件執行的語句

else

符合該條件執行的語句

fi

數值運算符

注意:數值運算符隻是針對數值的比較,如果用來比較的是字元或者字元串則會傳回報錯“ integer expression expected”

-eq 等于則為真,如果是對整數進行比較相當于“=”

-ne 不等于則為真,如果是對整數進行比較相當于“!=”

-gt 大于則為真,如果是對整數進行比較相當于“>”

-ge 大于等于則為真,如果是對整數進行比較相當于“>=”

-lt 小于則為真,如果是對整數進行比較相當于“

-le 小于等于則為真,如果是對整數進行比較相當于“<=”

字元串比較符

=:字元串包含的文本是否一樣

== 兩個字元串是否相等

>:比較字母的大小,比如var1 > var2,如果var1字母大于var2則傳回真

<:>

!= 兩個字元串不相等

-z 空字元串

-n 非空字元串

注意:字元串的比較有時候有可能需要用雙中括号“[[   ]]”,比如調用了指令進行比較,如果這個時候還是使用單中括号會報錯,如下:

#!/bin/bash

var1="a";

var2="a"

if [[ `cat $var1` = `cat $var2` ]]

then

echo "eq"

else

echo "neq"

fi

cat指令應用的必須是個檔案,不能直接引号内容。

檔案運算符

檔案/目錄判斷:

[ -a FILE ] :如果 FILE 存在則為真。

[ -b FILE ] :如果 FILE 存在且是一個塊特殊檔案則為真。

[ -c FILE ] :如果 FILE 存在且是一個字特殊檔案則為真。

[ -d FILE ] :如果 FILE 存在且是一個目錄則為真。

[ -e FILE ] :如果 FILE 存在則為真。

[ -f FILE ] :如果 FILE 存在且是一個普通檔案則為真。

[ -g FILE ] :如果 FILE 存在且已經設定了SGID則為真。

[ -h FILE ] :如果 FILE 存在且是一個符号連接配接則為真。

[ -k FILE ] :如果 FILE 存在且已經設定了粘制位則為真。

[ -p FILE ] :如果 FILE 存在且是一個名字管道(F如果O)則為真。

[ -r FILE ] :如果 FILE 存在且是可讀的則為真。

[ -o OPTIONNAME ] :如果 shell選項 “OPTIONNAME” 開啟則為真。

[ -s FILE ] :如果 FILE 存在且大小不為o則為真。

[ -t FD ] :如果檔案描述符 FD 打開且指向一個終端則為真。

[ -u FILE ] :如果 FILE 存在且設定了SUID (set user ID)則為真。

[ -w FILE ] :如果 FILE 如果 FILE 存在且是可寫的則為真。

[ -x FILE ] :如果 FILE 存在且是可執行的則為真。

[ -z STRING ]: “STRING” 的長度為零則為真。

[ -O FILE ]:如果 FILE 存在且屬有效使用者ID則為真。

[ -G FILE ]:如果 FILE 存在且屬有效使用者組則為真。

[ -L FILE ] :如果 FILE 存在且是一個符号連接配接則為真。

[ -n string ]:判斷内容是否為空

[ -N FILE ]: 如果 FILE 存在 and has been mod如果ied since it was last read則為真。

[ -S FILE ] :如果 FILE 存在且是一個套接字則為真。

[ FILE1 -nt FILE2 ] :如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not則為真。

[ FILE1 -ot FILE2 ] :如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在則為真。

[ FILE1 -ef FILE2 ] :如果 FILE1 和 FILE2 指向相同的裝置和節點号則為真。

建議也使用雙中括号

字元串判斷

[ -z STRING ] 如果STRING的長度為零則傳回為真,即空是真

[ -n STRING ] 如果STRING的長度非零則傳回為真,即非空是真

[ STRING1 ]  如果字元串不為空則傳回為真,與-n類似

[ STRING1 == STRING2 ] 如果兩個字元串相同則傳回為真

[ STRING1 != STRING2 ] 如果字元串不相同則傳回為真

[ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面則傳回為真。

[ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”後面則傳回為真。

數值判斷

[ INT1 -eq INT2 ] INT1和INT2兩數相等傳回為真 ,=

[ INT1 -ne INT2 ] INT1和INT2兩數不等傳回為真 ,<>

[ INT1 -gt INT2 ] INT1大于INT2傳回為真 ,>

[ INT1 -ge INT2 ] INT1大于等于INT2傳回為真,>=

[ INT1 -lt INT2 ] INT1小于INT2傳回為真 ,<

[ INT1 -le INT2 ] INT1小于等于INT2傳回為真,<=

邏輯判斷

[ ! EXPR ] 邏輯非,如果 EXPR 是false則傳回為真。

[ EXPR1 -a EXPR2 ] 邏輯與,如果 EXPR1 and EXPR2 全真則傳回為真。

[ EXPR1 -o EXPR2 ] 邏輯或,如果 EXPR1 或者 EXPR2 為真則傳回為真。

[ ] || [ ] 用OR來合并兩個條件

[ ] && [ ] 用AND來合并兩個條件

其他判斷

[ -t FD ] 如果檔案描述符 FD (預設值為1)打開且指向一個終端則傳回為真

[ -o optionname ] 如果shell選項optionname開啟則傳回為真

IF進階特性:

雙圓括号(( )):表示數學表達式

在判斷指令中隻允許在比較中進行簡單的算術操作,而雙圓括号提供更多的數學符号,而且在雙圓括号裡面的'>','

雙方括号[[ ]]:表示進階字元串處理函數

雙方括号中判斷指令使用标準的字元串比較,還可以使用比對模式,進而定義與字元串相比對的正規表達式。

可以用test指令檢查某個條件是否成立,它可以進行數值、字元串和檔案3個方面的測試,如果使用了test那麼就不要使用[]将指令括起來,否則會傳回報告如“too many arguments” 。

#!/bin/bash

var1="a"

var2="b"

var3="/data/test"

if test $var1 == $var2

then

echo "$var1=$var2"

else

echo "$var1!=$var2"

fi

echo "$var1,$var2"

if test -x "$var3"

then

echo "可執行檔案"

fi

邏輯判斷符

-a:與操作,可以用&&代替

-0:或操作,可以用||代替

!:非操作

算術運算符

+

-

*

/

%

+=:例如var+=1等同于var=var+1

-=

*=

/=

位操作符

注意:所有的這些運算符前後都要有空格否則就不是比較而是指派操作。

總結

備注:

本站點所有随筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明連結。

《歡迎交流讨論》