shell的邏輯判斷與表示式
阿新 • • 發佈:2019-01-05
shell中邏輯判斷與表示式,可以用來判斷檔案的存在性,屬性。
條件表示式在條件判斷時候很有用。
Tables & Code Example
邏輯卷標 | 表示意思 |
---|---|
1.關於檔案與目錄的偵測邏輯卷標! | |
-f | 常用!偵測『檔案』是否存在 eg: if [ -f filename ] |
-d | 常用!偵測『目錄』是否存在 |
-b | 偵測是否為一個『 block 檔案』 |
-c | 偵測是否為一個『 character 檔案』 |
-S | 偵測是否為一個『 socket 標籤檔案』 |
-L | 偵測是否為一個『 symbolic link 的檔案』 |
-e | 偵測『某個東西』是否存在! |
2.關於程式的邏輯卷標! | |
-G | 偵測是否由 GID 所執行的程式所擁有 |
-O | 偵測是否由 UID 所執行的程式所擁有 |
-p | 偵測是否為程式間傳送資訊的 name pipe 或是 FIFO |
3.關於檔案的屬性偵測! | |
-r | 偵測是否為可讀的屬性 |
-w | 偵測是否為可以寫入的屬性 |
-x | 偵測是否為可執行的屬性 |
-s | 偵測是否為『非空白檔案』 |
-u | 偵測是否具有『 SUID 』的屬性 |
-g | 偵測是否具有『 SGID 』的屬性 |
-k | 偵測是否具有『 sticky bit 』的屬性 |
4.兩個檔案之間的判斷與比較 ;例如『 test file1 -nt file2 』 | |
-nt | 第一個檔案比第二個檔案新 |
-ot | 第一個檔案比第二個檔案舊 |
-ef | 第一個檔案與第二個檔案為同一個檔案 link之類的檔案 |
5.邏輯的『和(and)』『或(or)』 | |
&& | 邏輯的 AND 的意思 |
ll | 邏輯的 OR 的意思 |
比較有趣的應該算是 1, 3 這兩種種類的判斷,尤其是在建立一些 permission 相關的檔案時,這個就更重要了!然後那個『兩個檔案之間的判斷』也是挺有意思的!有空的話不妨去試一試去!還有,那個 && 及 || 這兩個東西也是很重要的!接著下來,我們要來談一談運算子號囉!
#!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/access.log" #這裡的-x 引數判斷$myPath是否存在並且是否具有可執行許可權 if [ ! -x "$myPath"]; then mkdir "$myPath" fi #這裡的-d 引數判斷$myPath是否存在 if [ ! -d "$myPath"]; then mkdir "$myPath" fi #這裡的-f引數判斷$myFile是否存在 if [ ! -f "$myFile" ]; then touch "$myFile" fi #其他引數還有-n,-n是判斷一個變數是否是否有值 if [ ! -n "$myVar" ]; then echo "$myVar is empty" exit 0 fi #兩個變數判斷是否相等 if [ "$var1" = "$var2" ]; then echo '$var1 eq $var2' else echo '$var1 not eq $var2' fi
運算子:
代表意義 | |
---|---|
= | 等於 |
!= | 不等於 |
< | 小於 |
> | 大於 |
-eq | 等於 |
-ne | 不等於 |
-lt | 小於 |
-gt | 大於 |
-le | 小於或等於 |
-ge | 大於或等於 |
-a | 雙方都成立(and) |
-o | 單方成立(or) |
-z | 空字串 |
-n | 非空字串 |