Shell學習總結之邏輯運算符及表達式

一. 運算符總結說明

1. 條件運算符


運算符號 代表意義 應用 說明
= 等於 整型或字符串比較: str1 = str2 字符串str1 和字符串str2 相等時返回真,如果在[]中,只能是字符串
== 等於 整型或字符串比較: str1 == str2 字符串str1 和字符串str2 相等時返回真,如果在[]中,只能是字符串
!= 不等於 整型或字符串比較: str1 != str2 字符串str1和字符串str2不相等時返回真,如果在[]中,只能是字符串
< 小於 整型或字符串比較: str1 < str2 按字典順序排序,字符串str1 在字符串str2 之前,在[]中,它表示字符串,如需使用請轉義\<
> 大於 整型和字符串比較 在[]中,它表示字符串,如需使用請轉義\>
-eq 等於 整型比較: int1 -eq int2 如果int1 等於int2,則返回真
-ne 不等於 整型比較: int1 -ne int2 如果int1 不等於int2,則返回真
-lt 小於 整型比較: int1 -lt int2 如果int1 小於int2,則返回真
-gt 大於 整型比較: int1 -gt int2 如果int1 大於int2,則返回真
-le 小於或等於 整型比較: int1 -le int2 如果int1 小於等於int2,則返回真
-ge 大於或等於 整型比較: int1 -ge int2 如果int1 大於等於int2,則返回真
-z 空字符串 字符串比較: -z string 字符串string 爲空串(長度爲0)時返回真
-n 非空字符串 字符串比較 :-n string 字符串string 爲非空串時返回真

2. 邏輯運算符

運算符號 代表意義 應用 說明
-a 雙方都成立(and) 邏輯表達式 –a 邏輯表達式 在[] 表達式中使用
-o 單方成立(or) 邏輯表達式 –o 邏輯表達式 在[] 表達式中使用
! 邏輯否,條件爲假,結果爲真。    
&& 雙方都成立(and) 邏輯表達式 && 邏輯表達式 在[[]] 表達式中使用
\ \   單方成立(or)

3. 文件和目錄的判斷

邏輯符號 代表意義 應用 說明
-f 判斷文件是否存在 -f filename 當filename 存在並且是正規文件時返回真
-d 判斷目錄是否存在 -d pathname 當pathname 存在並且是一個目錄時返回真
-b 判斷是否爲一個【block檔案】 -b filename 當filename 存在並且是塊文件時返回真(返回0)
-c 判斷是否爲一個[character檔案] -c filename 當filename 存在並且是字符文件時返回真
-S 判斷是否爲一個[socket 標籤檔案] -S filename 當filename 存在並且是socket 時返回真
-L 判斷是否爲一個[symbolic link 的檔案] -L filename 當filename 存在並且是符號鏈接文件時返回真
-e 判斷【某個東西】是否存在 -e pathname 當由pathname 指定的文件或目錄存在時返回真

4. 程序的邏輯卷標判斷

邏輯符號 代表意義 應用 說明
-G 判斷是否由 GID 所執行的程序所擁有 -G pathname 當由pathname 存在並且屬於當前進程的有效用戶id 的用戶的用戶組時返回真
-O 判斷是否由 UID 所執行的程序所擁有 -O pathname 當由pathname 存在並且被當前進程的有效用戶id 的用戶擁有時返回真(字母O 大寫)
-p 判斷是否爲程序間傳送信息的 name pipe 或是 FIFO -p filename 當filename 存在並且是命名管道時返回真

5. 檔案的屬性判斷

邏輯符號 代表意義 應用 說明
-r 判斷是否爲可讀的屬性 -r pathname 當由pathname 指定的文件或目錄存在並且可讀時返回真
-w 判斷是否爲可以寫入的屬性 -w pathname 當由pathname 指定的文件或目錄存在並且可寫時返回真
-x 判斷是否爲可執行的屬性 -x pathname 當由pathname 指定的文件或目錄存在並且可執行時返回真
-s 判斷是否爲『非空白檔案』 -s filename 當filename 存在並且文件大小大於0 時返回真
-u 判斷是否具有『 SUID 』的屬性 -u pathname 當由pathname 指定的文件或目錄存在並且設置了SUID 位時返回真
-g 判斷是否具有『 SGID 』的屬性 -g pathname 當由pathname 指定的文件或目錄存在並且設置了SGID 位時返回真
-k 判斷是否具有『 sticky bit 』的屬性 -k pathname 當由pathname 指定的文件或目錄存在並且設置了"粘滯"位時返回真

6.兩個檔案之間的判斷與比較

邏輯符號 代表意義 應用 說明
-nt 第一個檔案比第二個檔案新 file1 -nt file2 file1 比file2 新時返回真
-ot 第一個檔案比第二個檔案舊 file1 -ot file2 file1 比file2 舊時返回真
-ef 第一個檔案與第二個檔案爲同一個檔案( link 之類的檔案) f1 -ef f2 files f1 and f2 are hard links to the same file

二. 邏輯表達式+運算符舉例說明

#! bin/bash
# -------------------------------------------------------------------------------
# 文件名:  Shell學習總結之邏輯運算符及表達式.sh
# 版 本:   1.0
# 創建日期: 2014/02/23
# 描 述:   邏輯運算符和邏輯表達式學習總結
# 作 者:   畢小朋
# 郵 箱:   [email protected]
# 博 客:   http://blog.csdn.net/wirelessqa
# -------------------------------------------------------------------------------

website="http://blog.csdn.net/wirelessqa"
myname="bixiaopeng"

echo "========= 邏輯表達式 test ========="
#注意:所有字符與邏輯運算符直接用“空格”分開,不能連到一起。
if test 3 -eq 3 -a 3 == 3 ;then echo "true" ;fi

#當3 大於 2 或 4 大於 3 並且 bxp 不等於 bixiaopeng  或 變量website不爲空時,爲真
if test 3 > 2 -a 4 -gt 2 -a "bxp" != "bixiaopeng" -o -n "$website" ;then echo "true"; else echo "false"; fi

#判斷文件是否存在
if test -f "/Users/bixiaopeng/justtest.txt" ;then echo "true"; else echo "false"; fi
#判斷目錄是否存在
if test -d "/Users/bixiaopeng" ;then echo "true"; else echo "false"; fi

echo "========= 邏輯表達式 [] ========="

#在[] 表達式中,常見的>,<需要加轉義字符,表示字符串大小比較,以acill碼位置作爲比較。
#不直接支持<>運算符,還有邏輯運算符 || 和 && 它需要用-a[and] –o[or]表示。
if [ 3 -eq 3 -a 3 == 3 ];then echo "true" ;fi

#當3 大於 2 或 4 大於 3 並且 bxp 不等於 bixiaopeng  或 變量website不爲空時,爲真
if [ 3 \> 2 -a 4 -gt 2 -a "bxp" != "bixiaopeng" -o -n "$website" ] ;then echo "true"; else echo "false"; fi

#判斷文件是否存在
if [ -f "/Users/bixiaopeng/justtest.txt" ] ;then echo "true"; else echo "false"; fi
#判斷目錄是否存在
if [ -d "/Users/bixiaopeng" ] ;then echo "true"; else echo "false"; fi

echo "========= 邏輯表達式 [[]] ========="

#[[]] 運算符只是[]運算符的擴充。能夠支持<,>符號運算不需要轉義符,它還是以字符串比較大小。裏面支持邏輯運算符 || 和 &&
if [[ 3 -eq 3 && 3 == 3 ]];then echo "true" ;fi

#當3 大於 2 或 4 大於 3 並且 bxp 不等於 bixiaopeng  或 變量website不爲空時,爲真
if [[ 3 > 2 && 4 -gt 2 && "bxp" != "bixiaopeng" || -n "$website" ]] ;then echo "true"; else echo "false"; fi

#判斷文件是否存在
if [[ -f "/Users/bixiaopeng/justtest.txt" ]] ;then echo "true"; else echo "false"; fi
#判斷目錄是否存在
if [[ -d "/Users/bixiaopeng" ]] ;then echo "true"; else echo "false"; fi

#[[]] 中可以使用通配符,不需要引號
[[ $myname = b*peng ]] && echo "true"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章