1. 程式人生 > >shell腳本的條件測試與比較

shell腳本的條件測試與比較

usr 中一 roo 由於 結合 關系運算符 操作 match 算術

條件測試語法:

語法1:test <測試表達式> 這是利用test命令進行條件測試表達式的方法。

語法2:[ <測試表達式> ]:這是通過單括號進行條件測試表達式的方法,和test命令的用法相同,推薦使用的

語法3:[[ <測試表達式> ]]:這是通過[[]]進行條件測試表達式的方法,是比test和[]更新的語法格式

語法4:((<c測試表達式>)):這是通過(())進行條件表達式的方法,一般用於if語句裏


針對上面的說明:

語法1和語法2是相同的,語法3是test的擴展。推薦使用語法2

在[[]]中可以使用通配符等進行模式匹配,這就是區別與其他幾種語法格式的地方

&&,||,>,<等操作符可以應用與[[]]中,但不能應用與[]中,在[]中一般用-a,-o,-get(用於整數),-lt(用於整數)代替上面的操作符。

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

root@ubuntu:/home/xpg# test -f /home/xpg/match.sh && echo good || echo bad
good

範例:使用-z測試一個字符串,如果字符串的長度為0則返回真,-n相反

root@ubuntu:/home/xpg# char=oldboy
root@ubuntu:/home/xpg# test -z "$char" && echo 1 || echo 0
0
root@ubuntu:/home/xpg# char=
root@ubuntu:/home/xpg# test -z "$char" && echo 1 || echo 0
1
root@ubuntu:/home/xpg#

[ ]和test性質一樣,在工作中主要使用這種。

root@ubuntu:/home/xpg# [ -f /home/xpg/match.sh ] && echo 1 || echo 0
1
上下的性質是一樣的

root@ubuntu:/home/xpg# [ -f /home/xpg/match.sh ] && echo 1 
1
root@ubuntu:/home/xpg# [ -f /home/xpg/match.sh ] || echo 0   
root@ubuntu:/home/xpg#

由於test 表達式 和 [ ]是一樣的,可以使用man test查看幫助的


root@ubuntu:/home/xpg# [[ -f /home/xpg/match.sh ]] && echo 1 || echo 1

1

[[ ]]和[ ]的區別在於[[ ]]可以使用通配符等進行模式匹配,並且&&,||,>,<等操作符可以應用在[[ ]]中,但不能應用在[ ],在[ ]中一般使用-a,-o,-gt,-lt代替上面的[[ ]].


文件測試表達式


先補充一點:

str1 != str2      當串str1和str2不等時為真 
-n str1        當串的長度大於0時為真(串非空) 
-z str1        當串的長度為0時為真(空串) 
str1           當串str1為非空時為真
!str2                 當子串為空時為真
int1 -eq int2    兩數相等為真 
int1 -ne int2    兩數不等為真 
int1 -gt int2    int1大於int2為真 
int1 -ge int2    int1大於等於int2為真 
int1 -lt int2    int1小於int2為真 
int1 -le int2    int1小於等於int2為真

-d :文件 文件存在且為目錄則是真

-f :文件 文件存在並且為普通文件為真

-e :文件 文件存在則為真,和上面-d,-f的區別是不分辨是目錄還是文件

-r :文件 文件存在並且可讀則為真

-s :文件 文件存在並且大小不為0則為真

-w :文件 文件存在並且可寫為真

-x :文件 文件存在並且可執行為真

-L :文件 文件存在並且為連接文件為真

f1 -nt f2, nt的全拼為newer than 文件f1比文件f2新則為真。

f1 -ot f2;-ot的全拼為older than 文件f1比文件f2舊則為真

使用-e和-d結合使用:
root@ubuntu:/home/xpg# [ -e /home/xpg/match.sh -a -d /home/xpg/match.sh ] && echo 1 || echo 0
0

生產的啟動腳本

例如:

root@ubuntu:/home/xpg# [ -x /usr/bin/apache2 ] || exit 5    #簡單的判斷,如果這個文件不存在或者不能被執行,返回exit 5
exit
xpg@ubuntu:~$ echo $?
5
xpg@ubuntu:~$


寫出簡單高效的測試文件

在做測試判斷的時候,不一定非要按照“前面的操作成功了如何,否則如何”的方法,有時候直接部分判斷,有時候看起來更加簡單。

root@ubuntu:/home/xpg# [ -x xpg ] && echo 1
root@ubuntu:/home/xpg# [ -x xpg ] || echo 1  
1


shell腳本的條件測試與比較