Centos命令——expr test

來源:互聯網
上載者:User

對檔案、字串和數字使用test命令。
對數字和字串使用expr命令。
expr命令測試和執行數值輸出。使用最後退出狀態命令 $? 可測知tes t和expr,二者均以0表示正確,1表示返回錯誤。

expr用法
expr命令一般用於整數值,但也可用於字串。一般格式為:
expr argument operator argument
expr也是一個手工命令列計數器。
# expr 10 + 10
20
# expr 1500 + 900
2500
# expr 30 / 3
10
# expr 30 / 3 / 2
5
(注意運算子左右都有空格)
使用乘號時,必須用反斜線屏蔽其特定含義。因為shell可能會誤解顯示星號的意義。
# expr 30 * 3
(正確操作)
# expr 5 \* 4

增量計數
expr在迴圈中用於增量計算。首先,迴圈初始化為0,然後迴圈值加1,反引號的用法意
即替代命令。最基本的一種是從(expr)命令接受輸出並將之放入迴圈變數。
# LOOP=0
# LOOP=`expr $LOOP + 1`

數值測試
可以用expr測試一個數。如果試圖計算非整數,將返回錯誤。
# rr=1.1
# expr $rr + 1
expr: non-numeric argument
$rr=2
# expr $rr + 1
3
這裡需要將一個值賦予變數(不管其內容如何),進行數值運算,並將輸出匯入dev/null,
然後測試最後命令狀態,如果為0,證明這是一個數,其他則表明為非數值。
# value=12
# expr $value + 10 > /dev/null 2>&1
# echo $?
0
這是一個數。
# value=hello
# expr $value + 10 > /dev/null 2>&1
# echo $?
2
這是一個非數值字元。

expr也可以返回其本身的退出狀態,不幸的是傳回值與系統最後退出命令剛好相反,成
功返回1,任何其他值為無效或錯誤。下面的例子測試兩個字串是否相等,這裡字串為
“hello”和“hello”。
# value=hello
# expr $value = "hello"
1
# echo $?
0
expr返回1。不要混淆了,這表明成功。現在檢驗其最後退出狀態,返回0表示測試成功,
“hello”確實等於“hello”。

test用法

test一般有兩種格式,即:test condition 或 [ condition ] 。使用方括弧時,要注意在條件兩邊加上空格。

熱門檔案狀態測試:
- d 目錄
- s 檔案長度大於0、非空
- f 正規檔案
- w 可寫
- L 符號串連
- u 檔案有suid位設定
- r 可讀
- x 可執行
- c 字元裝置檔案

使用兩種方法測試檔案scores.txt是否可寫並用最後退出狀態測試是否成功。記住:0表示成功,其他為失敗。

[root@localhost ~]# ls -l
-rw-r--r-- 1 root root 5 Sep 21 18:43 scores.txt

[root@localhost ~]# [ -w scores.txt ]
[root@localhost ruby]# echo $?
0

[root@localhost ~]# test -w scores.txt
[root@localhost ~]# echo $?
0

注意,這個的是否讀、寫、執行是根據目前使用者對這個檔案所擁有的許可權而言的。如果我們換另一個使用者,結果就不一定了。

測試時使用邏輯操作符
-a 邏輯與,操作符兩邊均為真,結果為真,否則為假。
-o 邏輯或,操作符兩邊一邊為真,結果為真,否則為假。
!邏輯否,條件為假,結果為真。

[root@localhost ~]# ls -l
-rw-r--r-- 1 root root 0 Sep 21 19:39 a
-rw-r--r-- 1 root root 0 Sep 21 19:39 b

[root@localhost ~]# [ -w a -a -x b ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -w a -o -x b ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ ! -w a -o -x b ]
[root@localhost ~]# echo $?
1

字串比較
= 兩個字串相等。
!= 兩個字串不等。
-z 空串。
-n 非空串。

[root@localhost ~]# a=""
[root@localhost ~]# [ -z $a ]
[root@localhost ruby]# echo $?
0

[root@localhost ~]# a="123"
[root@localhost ~]# [ -z $a ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -n $a ]
[root@localhost ~]# echo $?
0

測試數值
-eq 數值相等。
-ne 數值不相等。
-gt 第一個數大於第二個數。
-lt 第一個數小於第二個數。
-le 第一個數小於等於第二個數。
-ge 第一個數大於等於第二個數。

[root@localhost ~]# [ "123" -eq "123" -a "123" -ge "100" ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# a=12
[root@localhost ~]# b=10
[root@localhost ~]# [ $a -gt $b ]
[root@localhost ~]# echo $?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.