shell腳本的條件測試與比較
語法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腳本的條件測試與比較