一. 運算符總結說明
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"