shell中條件測試常用的語法(一)
shell中條件測試常用的語法(一)
執行條件測試表達式後通常會返回“真”或“假”,就像執行命令後的返回值為0表示真,非0表示假一樣。在bash程式設計裡,條件測試常用的語法形式如下:
說明:
(1)語法1與語法2是等價的,語法3是語法1的擴充套件;
(2)語法4常用於計算;
(3)在[[]](雙中括號)中可以使用萬用字元等進行模式匹配,這是區別其他幾種語法格式的地方;
(4)&&,||,>,<等操作符可以應用於[[]]中,在[]中一般用-a,-o,-gt(用於整數),-lt(用於整數),!= 代替上述操作符;
(5)對於整數的關係運算,也可以使用shell的算數運算子(())。
建議:工作中使用語法2!
常用的檔案測試操作符
[[email protected] ~]# touch wtf
[[email protected] ~]# ll wtf
-rw-r--r-- 1 root root 0 10月 23 03:25 wtf
[[email protected] ~]# chmod 001 wtf
[[email protected] ~]# ll wtf
---------x 1 root root 0 10月 23 03:25 wtf
[[email protected] ~]# [ -r wtf ] && echo 1 || echo 0
1
[[email protected]
1
[[email protected] ~]# [ -x wtf ] && echo 1 || echo 0
1
說明:wtf這個普通檔案沒有可讀可寫的許可權,為什麼還會返回1呢?這是因為我們使用的是root賬戶的原因!所以,我們在測試一個檔案的讀,寫,執行等屬性,不光是根據檔案屬性rwx的標識來判斷,還要看當前執行測試的使用者是否真的可以按照對應的許可權操作該檔案。
變數的特殊寫法和問題
[[email protected] ~]# echo $wtf
[[email protected]
1
[[email protected] ~]# [ -e "$wtf" ] && echo 1 || echo 0
0
說明:變數wtf是不存在的,但[ -e $wtf ]直接判斷時,返回值是1,這與邏輯不符合,所以這個時候變數wtf要加上雙引號"$wtf"。
對於檔案加不加引號結構都是一樣的,如:
[[email protected] ~]# cd /tmp
[[email protected] tmp]# ls
tmp0F7ZGn tmpcywyqY tmpEAwY35 tmpinHrdN tmpwk_xzo yum.log
[[email protected] tmp]# [ -e /tmp/wutengfei ] && echo 1 || echo 0
0
[[email protected] tmp]# [ -e "/tmp/wutengfei" ] && echo 1 || echo 0
0
轉載於:https://blog.51cto.com/wutengfei/1975410