[shell基礎]——算術運算

Jelly_lyj發表於2017-03-18

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

 

相關文章