Shell 的變數都是字串型態,因此非常不利於算數運算, 因此,Shell 並不適合作為大量算數運算的程式語言。 原始版本的 Bourne Shell 並無 內建的運算式,(我們將在後面的章節介紹PPOSIX定義的運算式), 如果真的有需要處理數值運算,我們可以使用expr這個外部指令。 讀者可自行查詢 expr 的用法。 格式如下:
expr expression
 
   
expression是由字串以及運算子所組成, 每個字串或是運算子之間必須用 空白隔開 。下表是運算子的種類及功能,而優先順序則以先後次序 排列,我們可以利用小括號來改變運算的優先次序。 其運算結果則輸出至標準輸出上。其運算符號及意義如下:
符號 說明
:
字串比較。
比較的方式是以兩字串的第一個字母開始, 而以第二個字串的最後一個字母結束。 如果兩者相同時,則輸出第二個字串的字母個數,如果不同時則傳 回0 。
右邊可以是 字串的 Regular Expression.
+ - * / %
加減乘除,取餘數
< = >
數值比較 (Numerical Comparison)
& |
邏輯運算,AND 及 OR
 
   
當expression中含有"*", "(", ")" 等符號時,必須在其前面加上"\" ,以免被 Shell 解釋成其它意義。
例: expr-example 執行結果
expr 2 \* \( 3 + 4 \)       
 
   
其輸出為 14
上面的式子,如果表達成下面這幾個樣字、都是不正確的。
expr 2 * ( 3 + 4 )    #錯誤,括弧前面少了 \  
expr 2 \* \( 3+4 \)   #錯誤,各項之間必須有空白隔開 
 
 
更多例子
expr 5 \* 3
expr 5 / 3
expr 5 % 3
a=0
a=`expr $a + 1`
echo $a
echo "Enter a number:"
read x
double=`expr 2 \* $x`
echo "$x times 2 is $double"
 
   
Generate numbers from 1 to 1000
# -----------------------------------------------
# counter1000: generate numbers from 1 to 1000
# ----------------------------------------------- 
count=1 while [ $count -le 1000 ] do echo $count count=`expr $count + 1 ` done
Web Page Copyright: 亞洲大學資訊電機學院 連耀南 yaonanlien@asia.edu.tw  expr.htm,  Thu Sep 7 16:18:53 CST 2023