shell學習之條件測試

2022-03-08 03:49:56 字數 3422 閱讀 4224

test命令用於測試檔案狀態、數字和字串,expr命令測試和執行數值輸出。

退出狀態可用$?檢視,0表示正確,其他數字表示錯誤。

test

test命令有兩種格式:

1 test 2 [ ]

注意:兩端都要有空格。常用於測試檔案狀態的選項如下:

1 -d 目錄

2 -s 檔案長度大於0、非空

3 -f 正規檔案

4 -w

可寫5 -l 符號連線

6 -u 檔案有suid設定

7 -r 可讀

8 -x 可執行

例子如下:

1 lee@ubuntu:~/shell_study/cu$ ls -al

2 總用量 16

3 drwxr-xr-x 2 lee lee 4096

2012-03-05

23:19

.4 drwxr-xr-x 16 lee lee 4096

2012-05-26

13:43

..5 -rw-r--r-- 1 lee lee 41

2012-03-05

23:19

file1

6 -rw-r--r-- 1 lee lee 47

2012-03-05

23:19

file2

7 lee@ubuntu:~/shell_study/cu$ [ -x file1 ]

8 lee@ubuntu:~/shell_study/cu$ echo $?91

10 lee@ubuntu:~/shell_study/cu$ [ -r file1 ]

11 lee@ubuntu:~/shell_study/cu$ echo $?

120

在測試時可以用邏輯操作符:

1 -a 邏輯與

2 -o 邏輯或

3 ! 邏輯否

字串測試有5種格式:

1 test "

"2 test "

"3 test """

"4 [ ]

5 [ ]

其中string_operator可以為下列之一,需要注意的是操作符兩邊都要有空格:

==兩個字串相等 ,與 = 等價

!=兩個字串不等

-z 空串

-n 非空串

例子如下:

1 lee@ubuntu:~/shell_study/cu$ str="

hello world

"2 lee@ubuntu:~/shell_study/cu$ echo

$str

3hello world

4 lee@ubuntu:~/shell_study/cu$ [ $str == "

hello world"]

5bash: [: 過多的引數

6 lee@ubuntu:~/shell_study/cu$ [ "

$str

" == "

hello world"]

7 lee@ubuntu:~/shell_study/cu$ echo $?

80

需要注意的是,當字串有空格時,要用雙引號,使用雙引號可引用除字元$、`、\外的任意字元或字串。這些特殊字元分別為美元符號,反引號和反斜線,對s h e l l來說,它們有特殊意義。

在test的時候,如果變數str為空或者帶有空格,則會出現第五行的錯誤,解決方案還是雙引號,參考

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

1 [[ $a == z* ]]    # 如果$a以"z"

開頭(模式匹配)那麼將為true

2 [[ $a == "

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

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

4 [ "

$a" == "

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

格式如下:

1 [ "

" number_operator "

" ]

number_operator為:

1 -eq 數值相等。

2 -ne 數值不相等。

3 -gt 第乙個數大於第二個數。

4 -lt 第乙個數小於第二個數。

5 -le 第乙個數小於等於第二個數。

6 -ge 第乙個數大於等於第二個數。

expr

expr命令一般用於整數值,但是也可以用於字串,格式為:

1

expr

例子:

1 lee@ubuntu:~/shell_study/cu$ expr

10 + 10220

3 lee@ubuntu:~/shell_study/cu$ expr

10 - 1040

5 lee@ubuntu:~/shell_study/cu$ expr

10 * 10

6expr

: 語法錯誤

7 lee@ubuntu:~/shell_study/cu$ expr

10 / 1081

9 lee@ubuntu:~/shell_study/cu$ expr

10 \* 10

10100

需要注意的是,為了避免shell的替代,乘法時要用反斜槓轉義。

expr可以用於在迴圈中的計數,如下例:

1 lee@ubuntu:~/shell_study/cu$ loop=1

2 lee@ubuntu:~/shell_study/cu$ loop=`expr $loop + 1

`3 lee@ubuntu:~/shell_study/cu$ echo

$loop

42

需要注意的是,expr的退出狀態和shell的退出狀態剛好相反,即expr中1表示正確退出,如:

1 lee@ubuntu:~/shell_study/cu$ value=hello

2 lee@ubuntu:~/shell_study/cu$ expr $value = "

hello"3

14 lee@ubuntu:~/shell_study/cu$ echo $?

50

格式:

1

expr

:

比如:

1 lee@ubuntu:~$ value=hello

2 lee@ubuntu:~$ expr $value : '.*'

35

Shell學習之條件測試

命令test或 可以測試乙個條件是否成立,如果測試結果為真,則該命令的exit status為 0,如果測試結果為假,則命令的 exit status為1 注意與 c語言的邏輯表示正好相反 例如測試兩個數的大小關係 itcast ubuntu var 2 itcast ubuntu test var...

shell之條件測試

1 test一般有兩種格式,即 test condition 或 condition 使用方括號時,要注意在條件兩邊加上空格。測試檔案狀態是否為o k,但是有時要比較兩個檔案狀態。s h e l l提供三種邏輯操作完成此 功能。a 邏輯與,操作符兩邊均為真,結果為真,否則為假。o 邏輯或,操作符兩邊...

shell條件測試

shell條件測試通常都會用在for while until if等控制流結構中,用於判斷檔案的相關性質或變數的相互關係。條件測試用法 test 表示式 結果 成立返回0,不成立返回非0 檢視結果 echo 以下是幾類常用的測試表示式 1 檔案狀態測試 b filename 當filename 存在...