1.expr命令一般用於整數值,其一般格式為:
expr argument operator argument
一般的用法是使用expr做算術運算,如:
[root@centos ~]# expr 10 + 20
30$expr 30 / 3 / 2
5(注意運算子左右都有空格 ,如果沒有空格表示是字串連線)
使用乘號時,必須用反斜線遮蔽其特定含義。因為shell可能會誤解顯示星號的意義。如:
[root@centos ~]# expr 10 * 10 //:錯誤,
expr: syntax error
[root@centos ~]# expr 10 \* 10 //正確
100
2.利用expr,把輸出匯入/dev/null,可以作判斷。
如果表示式成功,可以如下表示
$value=12
$expr $value + 10 > /dev/null 2>&1
$echo $?
0如果表示式失敗,返回非0值
$value=hello
$expr $value + 10 > /dev/null 2>&1
$echo $?
23.expr也操作用於字串
字串比較:
expr 如果成功,返回值1,任何其他值為無效或錯誤。如下面的例子測試兩個字串是否相等,這裡字串為「hello」和hello」。
$value=hello
$expr $value = "hello"
1#這時候shell的返回值為0。
$echo $?
04.expr的模式匹配:
filename="thread1.20110325.log"
echo `expr "$filename" : '.*\([0-9]\\).*'`
注意兩側的 .* :
1. 如果左邊沒有 .* 則相當於有 ^ ,也就是相當於開頭必須為數字
2. 如果右邊沒有 .* 則相當於有 $ ,也就是相當於結尾必須為數字
關於expr模式匹配,可以使用expr通過指定冒號:選項指定要進行字串模式匹配。 .*代表任
何字元重複0次或多次。返回值為括號中的內容.
如在tomcat的catalina.sh,使用了expr的模式匹配來獲取連線檔案的真實路徑,例子如下:
# resolve links - $0 may be a softlink
prg="$0"
while [ -h "$prg" ]; do
ls=`ls -ld "$prg"`
link=`expr "$ls" : '.*-> \(.*\)$'`
#這裡expr的返回值為連線檔案的真實路徑
if expr "$link" : '/.*' > /dev/null; then#路徑名返回1
prg="$link"
else
prg=`dirname "$prg"`/"$link"
fidone
link=`
expr
"$ls" : '.*-> \(.*\)$'` 中
expr
表示要根據某個模式去匹配字串並返回所匹配到的字串
或根據某個模式去計算匹配到的字元數。使用方式一般為:
expr
value : expression
"$ls" 表示取變數 ls 中的內容。
'.*-> \(.*\)$' 這部分是乙個正規表示式, .* 部分表示任意字元, -> 是實際的兩個字元, linux 中的軟鏈結會在使用 ls -al 命令列出檔案的時候,以 "軟鏈結 -> 真實檔案" 的方式顯示出軟鏈結與其所鏈結的真實檔案。$ 在這裡表示行結束 \( 就是 (, 因為 ( shell 中屬於特殊符號, 所以需要使用轉義; \) 同樣是轉義為 ) ;
整個 `
expr
"$ls" : '.*-> \(.*\)$'` 就表示取到軟連線的真實檔案或真實目錄。
shell指令expr使用指南
在linux shell命令中expr雖然不是很起眼,但是它的作用是非常大的!到目前為止,我個人看來最大的作用就是兩個 四則運算和字串的操作。先說四則運算,在shell中四則運算不能簡簡單單的加減乘除,應該要寫如下的格式 val1 val2 1 其中 後面用 包住表示式,這個符號在shell中十分有...
shell 關於expr的用法
關於expr的用法 2004 04 23 15 18 pm 來自 linux文件 現載 www.8s8s.com 我執行了一下,沒有錯啊 你用的是什麼平台?什麼shell?我執行了一下,也沒有錯啊 hp ux ksh 請問 sum和 的值必須是整數嗎?hp ux上提供的ksh不支援陣列,所以sale...
shell中的expr命令
expr 可以進行的操作如下 邏輯操作 arg1 arg2 邏輯或操作,真則返回arg1,否則返回arg2 以null或者0來判斷引數的真假,有短路功能 arg1 arg2 邏輯與操作,真則返回arg1,否則返回arg2 以null或者0來判斷引數真假,有短路功能 關係操作 arg1 arg2 或者...