shell expr 是一個功能強大,並且比較復雜的命令,它除了可以實現整數計算,還可以結合一些選項對字符串進行處理,例如計算字符串長度、字符串比較、字符串匹配、字符串提取等。
整數計算
Shell expr 對於整數計算的用法為:
expr 表達式
expr 對表達式的格式有幾點特殊的要求:
1)出現在表達式中的運算符、數字、變量和小括號的左右兩邊至少要有一個空格,否則會報錯。
2)有些特殊符號必須用反斜杠\進行轉義(屏蔽其特殊含義),比如乘號*和小括號(),如果不用\轉義,那么 Shell 會把它們誤解為正則表達式中的符號(*對應通配符,()對應分組)。
3)使用變量時要加$前綴。
[c.biancheng.net]$ expr 2 + 3 #這樣才是正確的 5 [c.biancheng.net]$ expr 4 \* 5 #使用 \ 轉義后才是正確的 20 [c.biancheng.net]$ expr \( 2 + 3 \) \* 4 #使用 \ 轉義后才是正確的 20 [c.biancheng.net]$ expr $n + 2 #加上 $ 才是正確的 5
使用 expr 命令,計算結果會直接輸出,如果你希望將計算結果賦值給變量,那么需要將整個表達式用反引號``(位於 Tab 鍵的上方)包圍起來。 將 expr 的計算結果賦值給變量: [c.biancheng.net]$ m=5 [c.biancheng.net]$ n=`expr $m + 10` [c.biancheng.net]$ echo $n 15
expr的字符串操作: 1、返回字符串長度:expr length 字串 [root@zq-crmtest-20423tmp]# expr length "hello world" 11 2、返回 String1 中包含 String2 中任意字符的第一個位置: expr indexString1 String2 [root@zq-crmtest-20423tmp]# expr index "abc" "b" 2 3、提取字符串的子串:expr substr 內容 起始位置 終點位置, [root@zq-crmtest-20423tmp]# expr substr "this is a test" 3 5 is is 4、測試兩個字符串是否相等 expr也可以返回其本身的退出狀態,不幸的是返回值與系統最后退出命令剛好相反,成功返回1,任何其他值為無效或錯誤。下面的例子測試兩個字符串是否相等,這里字符串為“hello”和“hello”。 $value=hello $expr $value = "hello" 1 $echo $? 0 expr返回1