shell中條件測試常用的文法(一)
執行條件測試表達式後通常會傳回“真”或“假”,就像執行指令後的傳回值為0表示真,非0表示假一樣。在bash程式設計裡,條件測試常用的文法形式如下:
<a href="https://s1.51cto.com/oss/201710/23/a52c3b6a03e527ebd588aab2aec475e2.png" target="_blank"></a>
說明:
(1)文法1與文法2是等價的,文法3是文法1的擴充;
(2)文法4常用于計算;
(3)在[[]](雙中括号)中可以使用通配符等進行模式比對,這是差別其他幾種文法格式的地方;
(4)&&,||,>,<等操作符可以應用于[[]]中,在[]中一般用-a,-o,-gt(用于整數),-lt(用于整數),!= 代替上述操作符;
(5)對于整數的關系運算,也可以使用shell的算數運算符(())。
建議:工作中使用文法2!
常用的檔案測試操作符
<a href="https://s5.51cto.com/oss/201710/23/8eb7c4c18005aa24ee7ec2f2a3675152.png" target="_blank"></a>
[root@ceshiji ~]# touch wtf
[root@ceshiji ~]# ll wtf
-rw-r--r-- 1 root root 0 10月 23 03:25 wtf
[root@ceshiji ~]# chmod 001 wtf
---------x 1 root root 0 10月 23 03:25 wtf
[root@ceshiji ~]# [ -r wtf ] && echo 1 || echo 0
1
[root@ceshiji ~]# [ -w wtf ] && echo 1 || echo 0
[root@ceshiji ~]# [ -x wtf ] && echo 1 || echo 0
說明:wtf這個普通檔案沒有可讀可寫的權限,為什麼還會傳回1呢?這是因為我們使用的是root賬戶的原因!是以,我們在測試一個檔案的讀,寫,執行等屬性,不光是根據檔案屬性rwx的辨別來判斷,還要看目前執行測試的使用者是否真的可以按照對應的權限操作該檔案。
變量的特殊寫法和問題
[root@ceshiji ~]# echo $wtf
[root@ceshiji ~]# [ -e $wtf ] && echo 1 || echo 0
[root@ceshiji ~]# [ -e "$wtf" ] && echo 1 || echo 0
說明:變量wtf是不存在的,但[ -e $wtf ]直接判斷時,傳回值是1,這與邏輯不符合,是以這個時候變量wtf要加上雙引号"$wtf"。
對于檔案加不加引号結構都是一樣的,如:
[root@ceshiji ~]# cd /tmp
[root@ceshiji tmp]# ls
tmp0F7ZGn tmpcywyqY tmpEAwY35 tmpinHrdN tmpwk_xzo yum.log
[root@ceshiji tmp]# [ -e /tmp/wutengfei ] && echo 1 || echo 0
[root@ceshiji tmp]# [ -e "/tmp/wutengfei" ] && echo 1 || echo 0
本文轉自品鑒初心51CTO部落格,原文連結:http://blog.51cto.com/wutengfei/1975410,如需轉載請自行聯系原作者