shell expr的用法


root@tcx4440-03:~# var=$var+1
root@tcx4440-03:~# echo $var
3+1

要想達到預期結果,用下列三種方法:

(1)let "var+=1"

(2)var=$[$var+1] 

(3)var=`expr $var + 1`#注意加號兩邊的空格,否則還是按照字符串的方式賦值。

 

expr命令一般用於整數值,但也可用於字符串。一般格式為:
expr argument operator argument

(1)
root@tcx4440-03:~# expr 30 + 30
60
root@tcx4440-03:~# expr 30 \* 2
60

(注意運算符左右都有空格
,如果沒有空格表示是字符串連接)
使用乘號時,必須用反斜線屏蔽其特定含義。因為shell可能會誤解顯示星號的意義。

 

(2)

這里需要將一個值賦予變量(不管其內容如何),進行數值運算,並將輸出導入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”。

 

(3)expr 的字符串操作

提取指定字符的下標:expr index 內容 字符,例如:$ind=`expr index "$content" "="` (獲取字符下標)

提取字符串的子串:expr substr 內容 起始位置 字符個數,例如:$con=`expr substr "$content" "1" $ind (通過下標獲取字符串)

 

root@tcx4440-03:~# var=helloword

root@tcx4440-03:~# expr substr $var 2 5
ellow

root@tcx4440-03:~# tmp=`expr index $var o`
root@tcx4440-03:~# echo $tmp
5
root@tcx4440-03:~# echo $var
helloword

 

 (4)字串真實重現,與echo相似

root@tcx4440-03:~# echo dfdfd
dfdfd
root@tcx4440-03:~# expr dddd
dddd

 

(5)計算字符串的長度

root@tcx4440-03:~# expr length "abc"
3

root@tcx4440-03:~# var=helloworld
root@tcx4440-03:~# expr length $var
10

(6)expr的模式匹配,

說明:expr也有模式匹配功能。可以使用expr通過指定冒號選項計算字符串中字符數。
.* 意即任何字符重復0次或多次。

root@tcx4440-03:~# var=document.doc

root@tcx4440-03:~# expr $var : '.*'
12

 

(7)在expr中可以使用字符串匹配操作,這里使用模式抽取.doc文件附屬名。注意:需要用反斜杠對()進行轉義,同時注意空格

root@tcx4440-03:~# expr $var : '\(.*\).doc'
document

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM