shell指令碼條件判斷

2021-06-21 09:13:35 字數 3054 閱讀 6111

unix shell 程式設計中條件判斷是極為重要的,以下是常用的條件判斷:

檔案判斷

-b file 若檔案存在且是乙個塊特殊檔案,則為真

-c file 若檔案存在且是乙個字元特殊檔案,則為真

-d file 若檔案存在且是乙個目錄,則為真

-e file 若檔案存在,則為真

-f file 若檔案存在且是乙個規則檔案,則為真

-g file 若檔案存在且設定了sgid位的值,則為真

-h file 若檔案存在且為乙個符合鏈結,則為真

-k file 若檔案存在且設定了」sticky」位的值

-p file 若檔案存在且為一已命名管道,則為真

-r file 若檔案存在且可讀,則為真

-s file 若檔案存在且其大小大於零,則為真

-u file 若檔案存在且設定了suid位,則為真

-w file 若檔案存在且可寫,則為真

-x file 若檔案存在且可執行,則為真

-o file 若檔案存在且被有效使用者id所擁有,則為真

字串判斷

-z string 若string長度為0,則為真

-n string 若string長度不為0,則為真

string1 = string2 若兩個字串相等,則為真

string1 != string2 若兩個字串不相等,則為真

整數判斷

int1 -eq int2 若int1等於int2,則為真

int1 -ne int2 若int1不等於int2,則為真

int1 -lt int2 若int1小於int2,則為真

int1 -le int2 若int1小於等於int2,則為真

int1 -gt int2 若int1大於int2,則為真

int1 -ge int2 若int1大於等於int2,則為真

二元比較操作符,比較變數或者比較數字.注意數字與字串的區別. 

整數比較 

-eq       等於, 如: if [ "$a" -eq "$b" ] 

-ne       不等於, 如: if [ "$a" -ne "$b" ] 

-gt       大於, 如: if [ "$a" -gt "$b" ] 

-ge       大於等於, 如: if [ "$a" -ge "$b" ] 

-lt       小於, 如: if [ "$a" -lt "$b" ] 

-le       小於等於, 如: if [ "$a" -le "$b" ] 

<         小於(需要雙括號), 如: (("$a" < "$b")) 

<=        小於等於(需要雙括號), 如: (("$a" <= "$b")) 

>         大於(需要雙括號), 如: (("$a" > "$b")) 

>=        大於等於(需要雙括號), 如: (("$a" >= "$b")) 

字串比較 

=        等於,如:if [ "$a" = "$b" ] 

==       等於,如:if [ "$a" == "$b" ], 與=等價 

注意:==的功能在和中的行為是不同的, 如下: 

1 [[ $a == z* ]]    # 如果 $a 以 "z" 開頭(模式匹配)那麼將為true 

2 [[ $a == "z*" ]]  # 如果 $a 等於 z* (字元匹配), 那麼結果為true 

3 4 [ $a == z* ]      # file globbing 和 word splitting 將會發生 

5 [ "$a" == "z*" ]  # 如果$a等於z*(字元匹配), 那麼結果為true 

一點解釋, 關於file globbing是一種關於檔案的速記法, 比如"*.c"就是,再如~也是. 

但是file globbing並不是嚴格的正規表示式, 雖然絕大多數情況下結構比較像. 

!=       不等於, 如:if [ "$a" != "$b" ] 

這個操作符將在結構中使用模式匹配. 

<        小於, 在ascii字母順序下.如: 

if [[ "$a" < "$b" ]] 

if [ "$a" \< "$b" ] 

注意: 在結構中"<"需要被轉義. 

>        大於, 在ascii字母順序下. 如: 

if [[ "$a" > "$b" ]] 

if [ "$a" \> "$b" ] 

注意: 在結構中">"需要被轉義. 

具體參考example 26-11來檢視這個操作符應用的例子. 

-z       字串為 "null". 就是長度為0. 

-n       字串不為 "null" 

注意: 

使用 -n 在 結構中測試必須要用 "" 把變數引起來. 使用乙個未被""的字串來使用 ! -z 

或者就是未用""引用的字串本身,放到結構中。雖然一般情況下可 

以工作, 但這是不安全的. 習慣於使用""來測試字串是一種好習慣. 

!expr 若expr為假則復合表示式為真。expr可以是任何有效的測試表示式

expr1 -a expr2 若expr1和expr2都為真則整式為真

expr1 -o expr2 若expr1和expr2有乙個為真則整式為真

特殊變數

$0 正在被執行命令的名字。對於shell指令碼而言,這是被啟用命令的路徑

$n 該變數與指令碼被啟用時所帶的引數相對應。n是正整數,與引數位置相對應($1,$2…)

$# 提供指令碼的引數號

$* 所有這些引數都被雙引號引住。若乙個指令碼接收兩個引數,$*等於$1$2

$@ 所有這些引數都分別被雙引號引住。若乙個指令碼接收到兩個引數,$@等價於$1$2

$? 前乙個命令執行後的退出狀態

$$ 當前shell的程序號。對於shell指令碼,這是其正在執行時的程序id

$! 前乙個後台命令的程序號

行末:$      

行首:^

空格:\s

行末空格:\s\+$

行首空格:^\+\s

shell指令碼條件判斷

shell指令碼條件判斷 unix shell 程式設計中條件判斷是極為重要的,以下是常用的條件判斷 b file 若檔案存在且是乙個塊特殊檔案,則為真 c file 若檔案存在且是乙個字元特殊檔案,則為真 d file 若檔案存在且是乙個目錄,則為真 e file 若檔案存在,則為真 f file...

shell指令碼 條件

test或 命令 test用法 檢查乙個檔案是否存在。if test f fred.c thenfi或 if f fred.c then fi bin sh echo is it morning?please answer yes or no read timeofday if timeofday ...

Shell指令碼 條件語句

1 檔案測試 2 整數值比較 3 字串與邏輯測試 if語句 單分支的if語句 雙分支的if語句 多分枝的if語句 檔案測試是指的是根據給定的路徑名稱,判斷對應的是檔案還是目錄,或者判斷檔案是否可讀 可寫 可執行等。基本格式 test 條件表示式 或者 條件表示式 檔案的常見操作選項如下 選項 描述 ...