[shell基础]——算术运算
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