[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
原文地址:https://www.cnblogs.com/snsdzjlz320/p/5605299.html