shell中if語句的格式以及使用

2021-09-22 19:16:36 字數 4279 閱讀 6432

比較兩個字串是否相等的辦法是:

if [ "$test"x = "test"x ]; then

這裡的關鍵有幾點:

1 使用單個等號

2 注意到等號兩邊各有乙個空格:這是unix shell的要求

3 注意到"$test"x最後的x,這是特意安排的,因為當$test為空的時候,上面的表示式就變成了x = testx,顯然是不相等的。而如果沒有這個x,表示式就會報錯:[: =: unary operator expected

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

整數比較

-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"))

小資料比較可使用awk

字串比較

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

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

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

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

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

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" ]

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

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

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

-n 字串不為"null"

注意:

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

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

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

if判斷式

if [ 條件判斷一 ] && (||) [ 條件判斷二 ]; then

elif [ 條件判斷三 ] && (||) [ 條件判斷四 ]; then

else

執行第三段內容程式fi

例如:

root@bizbox:~# a=0

root@bizbox:~# b=0

root@bizbox:~# c=5

root@bizbox:~# if [ $a = 0 -a $b = 0 ]&&[ $c != 0 ]; then

> echo success

> fi

success

if 使用的表示式

primary 意義

[ -a 檔案 ] 如果檔案存在為真。

[ -b 檔案 ] 如果 檔案 存在 而且 是乙個 塊-特殊 檔案為真。

[ -c 檔案 ] 為真 如果 檔案 存在 而且 是乙個 字-特殊 檔案。

[ -d 檔案 ] 為真 如果 檔案 存在 而且 是乙個 目錄。

[ -e 檔案 ] 為真 如果 檔案 存在。

[ -f 檔案 ] 為真 如果 檔案 存在 而且 是乙個 普通 檔案。

[ -g 檔案 ] 為真 如果 檔案 存在 而且 已經設定了他的 sgid 位。

[ -h 檔案 ] 為真 如果 檔案 存在 而且 是乙個 符號連線。

[ -k 檔案 ] 為真 如果 檔案 存在 而且 他的粘住位已經設定。

[ -p 檔案 ] 為真 如果 檔案 存在 而且 是乙個 已經命名的管道 (f 如果o)。

[ -r 檔案 ] 為真 如果 檔案 存在 而且 是可讀的。

[ -s 檔案 ] 為真 如果 檔案 存在 而且 比零位元組大。

[ -t fd ] 為真 如果 檔案 檔案描述符已經開啟 而且 指向乙個終端。

[ -u 檔案 ] 為真 如果 檔案 存在 而且 已經設定了他的 suid (set user id)位。

[ -w 檔案 ] 為真 如果 檔案 為真 如果 檔案 存在 而且 是可寫的。

[ -x 檔案 ] 為真 如果 檔案 存在 而且 是可執行的。

[ -o 檔案 ] 為真 如果 檔案 存在 而且 屬於有效使用者id。

[ -g 檔案 ] 為真 如果 檔案 存在 而且 屬於有效組id。

[ -l 檔案 ] 為真 如果 檔案 存在 而且 是乙個 符號連線。

[ -n 檔案 ] 為真 如果 檔案 存在 而且 has been mod 如果ied since it was last read。

[ -s 檔案 ] 為真 如果 檔案 存在 而且 是乙個 socket。

[ 檔案1 -nt 檔案2 ] 為真 如果 檔案1 has been changed more recently than 檔案2, or 如果

檔案1 存在 而且

檔案2 does not。

[ 檔案1 -ot 檔案2 ] 為真 如果 檔案1 比 檔案2 舊, 或者 檔案2 存在而且 檔案1 不存在。

[ 檔案1 -ef 檔案2 ] 為真 如果 檔案1 而且 檔案2 refer to the same device 而且 inode

numbers。

[ -o 選項名 ] 為真 如果 shell 選項 "選項名" 開啟。

[ -z string ] 為真 如果 "string"的長度是零。

[ -n string ] 或者 [ string ] 為真 "string"的長度是非零值。

[ string1 == string2 ] 如果兩個字串相等為真。 "=" may be used instead of "==" for

strict posix compliance。

[ string1 != string2 ] 為真 如果 兩兩個字串不相等。

[ string1 < string2 ] 為真 如果 "string1" sorts before "string2" lexicographically in the

current locale。

[ string1 > string2 ] 為真 如果 "string1" sorts after "string2" lexicographically in the

current locale。

[ arg1 op arg2 ]

"op" 是 -eq, -ne, -lt, -le, -gt or -ge 其中乙個。 these arithmetic binary operators

return 為真 如果 "arg1" is equal to, not equal to, less than, less than or equal to, greater

than, or greater than or equal to "arg2", respectively。 "arg1" 而且 "arg2" are

integers。

表示式可以藉以下操作符組合起來, listed in decreasing order of precedence:

操作符效果

[ ! expr ] 如果expr 為假則為真。

[ ( expr ) ] 返回expr 的值。 這樣可以用來忽略正常的操作符優先順序。

[ 表示式1 -a 表示式2 ] 如果表示式1 而且表示式2 同時為真則為真 。

[ 表示式1 -o 表示式2 ] 如果表示式1 或者表示式2 其中之一為真則為真。

****************************************==

shell中變數間接引用:

假設a=b,b=123,如何通過a獲得123呢,通過變數間接引用可以做到:eval a=\$$b (bash版本2中a=$也可以做到)

shell 中的if語句

1 2 3 4 if a a 空格用 標示 then echo a a fi 最近幾天寫指令碼,遇到if語句時總是吃不準。這次總結一下。使用if語句有2中方式,一種是使用test命令另一種是使用 其中後者比較常用。方法一,使用test命令,這個命令返回乙個boolean值。1 test e data...

shell中的if語句

語法格式 if command then commands fi其中的command包含如下 shell command 任何shell命令,如果shell命令返回0,代表true,否則,代表false。並且多個command可以同時作為if的判斷條件,即可以寫為 if command1 comma...

shell 中的if語句

bash中如何實現條件判斷?條件測試型別 整數測試 字元測試 檔案測試 一 條件測試的表示式 expression 括號兩端必須要有空格 expression 括號兩端必須要有空格 test expression 組合測試條件 二 整數比較 命令間的邏輯關係 第乙個條件為假 第二個條件不用在判斷,最...