shell只支援整數運算。一般可用let、expr、declare、$[]實現。
更精準的運算建議使用Linux下的bc工具——一款高精度計算語言。
1. let是shell內建的整數運算命令
## 可完成+ - * / % ** 加減乘除餘冪等常規運算子 let a=1+1 ; echo $a let b=9/4 ; echo $b let c=10%3; echo $c let d=a**3; echo $d
## 可完成+= -= *= /= %= 等混合運算子
x=8 ;let x-=2 echo $x y=8 ;let y/=2 echo $y # bash let.sh 2 2 1 8
## 移位運算
n=4 echo "obase=2;$n" | bc #輸出一個數的二進位制 let "val1=$n<<2" echo "obase=2;$val1" | bc ; echo $val1 let "val2=$n>>2" echo "obase=2;$val2" | bc;echo $val2 # bash let.sh 100 10000 16 1 1
##按位與、按位或、按位非、按位異或運算
n1=8 n2=4 echo -n "n1:"; echo "obase=2;$n1"|bc echo -n "n2:"; echo "obase=2;$n2"|bc let "value=$n1|$n2" echo -n "|或運算:"; echo "obase=2;$value"|bc let "value=$n1&$n2" echo -n "&與運算:"; echo "obase=2;$value"|bc let "value=$n1^$n2" echo -n "^異或運算:";echo "obase=2;$value"|bc # bash let.sh n1:1000 n2:100 |或運算:1100 &與運算:0 ^異或運算:1100
## 自增自減運算
n1=10 n2=10 let "result_1=(++n1)" #先自增再賦值 #注意此時裡面的n1並沒有寫成$n1
let "result_2=(n2++)" #先賦值再自增 echo "n1=$n1" echo "n2=$n2" echo "result_1=$result_1" echo "result_2=$result_2" #bash let.sh 11 11 11 10
2. 其他運算子$[]、expr、declare
echo $[1+1] echo $[5/2] echo $[2**3] expr 2 \* 2 #注意運算元運算子的空格;和運算子的轉義 declare -i J J=1+1 echo $J #bash test.sh 2 2 8 4 2
3.算術表示式 $((算術表示式))
i=2 echo $((2*i+1)) echo $((2*(i+1))) #可以用括號表達先計算括號裡的式子 #bash test.sh 5 6
4. bc工具(更常用)
echo "3^2" |bc #注意怎麼寫 echo "scale=3;10/3" |bc #scale=n表示保留n為小數 #bash test.sh 9 3.333