shell判断false_Linux脚本shell常用判断式
在shell腳本編程中,判斷式是經常被使用的。判斷式的使用有兩種方式,其中一種是使用test,另一種是使用 []。
下面我們通過兩個簡單的例子來看一下這兩種方式如何使用。
例一
# test –e /tmp/a.txt ; echo $?
結果為0
我們看到,上面的結果為0。因為在/tmp目錄下面是存在a.txt這個文件的。當然按照我們在其他編程語言中學到的知識來判斷,這個結果應該是錯誤的。因為如果/tmp/a.txt文件存在的話,那結果應該是true啊,怎么會是0呢? 0代表的不是false嗎?當然這里就涉及到一個特殊的符號 $?,這個符號表示的是上一個命令的回傳值。詳細內容可以查看《Linux中命令回傳值 $? 詳解》。
-e 是判斷指定的文檔名是否存在,要查看結果除了上面在例一中我們介紹的方式,還可以&& 和 || 來查看。
例二
# test –e /tmp/a.txt && echo ‘Yes’ || echo ‘No’
&& 和 || 就是我們在其他的編程語言中的 ‘與’和‘或’。
除了使用test作為判斷式的關鍵字,還可以使用[]來進行判斷。下面我們可以將例一通過[]進行改進。
例三
# [ -e /tmp/a.txt ] ; echo $?
這里需要注意的是,[]這里的兩個邊界要和里面的內容之間有空格 [空格 判斷式 空格]。
在上面的例子中我們只使用到了 –e,用來判斷指定的文檔是否存在。那在判斷式中還有哪些標志可以用,這些標志又各自代表什么含義。我們可以參考下面的表(這張表是摘自鳥哥的linux私房菜)
關於某個檔名的『文件類型』判斷,如 test -e filename 表示存在否
-e
該『檔名』是否存在?(常用)
-f
該『檔名』是否存在且為文件(file)?(常用)
-d
該『檔名』是否存在且為目錄(directory)?(常用)
-b
該『檔名』是否存在且為一個 block device 裝置?
-c
該『檔名』是否存在且為一個 character device 裝置?
-S
該『檔名』是否存在且為一個 Socket 文件?
-p
該『檔名』是否存在且為一個 FIFO (pipe) 文件?
-L
該『檔名』是否存在且為一個連結檔?
關於文件的權限偵測,如 test -r filename 表示可讀否 (但 root 權限常有例外)
-r
偵測該檔名是否存在且具有『可讀』的權限?
-w
偵測該檔名是否存在且具有『可寫』的權限?
-x
偵測該檔名是否存在且具有『可運行』的權限?
-u
偵測該檔名是否存在且具有『SUID』的屬性?
-g
偵測該檔名是否存在且具有『SGID』的屬性?
-k
偵測該檔名是否存在且具有『Sticky bit』的屬性?
-s
偵測該檔名是否存在且為『非空白文件』?
兩個文件之間的比較,如: test file1 -nt file2
-nt
(newer than)判斷 file1 是否比 file2 新
-ot
(older than)判斷 file1 是否比 file2 舊
-ef
判斷 file1 與 file2 是否為同一文件,可用在判斷 hard link 的判定上。 主要意義在判定,兩個文件是否均指向同一個 inode 哩!
關於兩個整數之間的判定,例如 test n1 -eq n2
-eq
兩數值相等 (equal)
-ne
兩數值不等 (not equal)
-gt
n1 大於 n2 (greater than)
-lt
n1 小於 n2 (less than)
-ge
n1 大於等於 n2 (greater than or equal)
-le
n1 小於等於 n2 (less than or equal)
判定字串的數據
test -z string
判定字串是否為 0 ?若 string 為空字串,則為 true
test -n string
判定字串是否非為 0 ?若 string 為空字串,則為 false。
注: -n 亦可省略
test str1 = str2
判定 str1 是否等於 str2 ,若相等,則回傳 true
test str1 != str2
判定 str1 是否不等於 str2 ,若相等,則回傳 false
多重條件判定,例如: test -r filename -a -x filename
-a
(and)兩狀況同時成立!例如 test -r file -a -x file,則 file 同時具有 r 與 x 權限時,才回傳 true。
-o
(or)兩狀況任何一個成立!例如 test -r file -o -x file,則 file 具有 r 或 x 權限時,就可回傳 true。
!
反相狀態,如 test ! -x file ,當 file 不具有 x 時,回傳 true
總結
以上是生活随笔為你收集整理的shell判断false_Linux脚本shell常用判断式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python调试蓝牙适配器_我写了一个查
- 下一篇: 广州“齐刘海”狮子换“大背头” 微信:百