數學運算之 expr
expr操作符對照表
比較大小,只能對整數進行比較,需要加空格,linux 保留關鍵字要轉義
num1=30 num2=50 expr $num1 \> $num2
查看上一條命令有沒有執行成功
echo $?
返回0 成功,其他失敗
小於、小於等於、大於等於
expr $num1 \< $num2 expr $num1 \<= $num2 expr $num1 \>= $num2
運算 加、減、乘、除
# 加 num1=17 num2=5 expr $num1 + $num2 # 減 num3=`expr $num1 + $num2` echo $num3 expr $num1 - $num2 # 乘 expr $num1 \* $num2 expr $num1 / $num2 # 取余數 expr $num1 % $num2
需要注意事項:
兩個小括號的計算方法,要賦值,否則會報錯
# 直接輸出報錯 $(($num1+$num2)) # 需要賦值給一個變量 num3=$(($num1+$num2)) echo $num3 num3=$(($num1*$num2)) echo $num3 num3=$(($num1-$num2)) echo $num3 num3=$(($num1/$num2)) echo $num3
一些操作符在$(()) 不支持, 在比較運算的時候最好使用expr
num1=5 num2=5 num3=$(($num1=$num2))
expr $num1 = $num2
練習例子
提示用戶輸入一個正整數num,然后計算1+2+3+...+num的值;必須對num是否為正整數做判斷,不符合應當運行再次輸入
判斷是否是一個正整數
思路:
- expr只能對整數進行計算,直接用expr 和一個整數計算獲取 $? 的值來判斷是否為整數
- 在使用 expr $num1 \> 0 判斷是否大於0
# 不是整數使用 expr 進行數學運算會出錯 num1=56.58 expr $num1 + 1
sum.sh
#!/bin/bash # while true do read -p "please input a positive number: " num # 判斷數是否是整數 expr $num + 1 &> /dev/null if [ $? -eq 0 ];then # 判斷這個整數是否大於0,大於0返回1 if [ `expr $num \> 0` -eq 1 ];then #echo "yes,positive number" # $sum沒有賦值,默認為0 for((i=1;i<=$num;i++)) do sum=`expr $sum + $i` done echo "1+2+3+...+$num = $sum" # 執行計算需要退出 exit fi fi echo "error,input enlegal" continue done
執行腳本
sh sum.sh
shell 運算之 bc
bc 介紹:
- bc 是bash內建的運算器,支持浮點數運算
- 內建變量scale可以設置,默認為 0
bc 操作符對照表
交互測試
腳本中使用管道符進行計算
echo "23+33" | bc
保留精度 scale=4; 用分號隔開
echo "scale=4;23.3/3.5" | bc
bc示例腳本
bc.sh
#!/bin/bash # read -p "num1: " num1 read -p "num2: " num2 #echo "scale=4;$num1/$num2" | bc num3=`echo "scale=4;$num1/$num2" | bc` echo "$num1 / $num2 = $num3"
執行
sh bc.sh