通过shell进行数学计算

时间:2023-03-09 17:39:58
通过shell进行数学计算

对于基本运算,可以使用let, $(())和$[]

对于高级运算,使用expr和bc这两个工具

[hupeng@hupeng-vm shell]$n1=
[hupeng@hupeng-vm shell]$n2=
[hupeng@hupeng-vm shell]$let res=n1+n2 #let的使用
[hupeng@hupeng-vm shell]$echo $res [hupeng@hupeng-vm shell]$let res=n1*n2
[hupeng@hupeng-vm shell]$echo $res [hupeng@hupeng-vm shell]$let res+= #let 支持+=, -=, *=,/=,%=
[hupeng@hupeng-vm shell]$echo $res [hupeng@hupeng-vm shell]$let res-=
[hupeng@hupeng-vm shell]$echo $res [hupeng@hupeng-vm shell]$let res/=
[hupeng@hupeng-vm shell]$echo $res [hupeng@hupeng-vm shell]$let res++ #let支持++,--操作
[hupeng@hupeng-vm shell]$echo $res [hupeng@hupeng-vm shell]$let --res
[hupeng@hupeng-vm shell]$echo $res [hupeng@hupeng-vm shell]$a=
[hupeng@hupeng-vm shell]$b=
[hupeng@hupeng-vm shell]$res=$[ a * b] # $[]的使用
[hupeng@hupeng-vm shell]$echo $res [hupeng@hupeng-vm shell]$res=$[ $res / + ] # []中也可以使用$前缀
[hupeng@hupeng-vm shell]$echo $res [hupeng@hupeng-vm shell]$res=$(( a + b )) # $(()使用 前面要加$
[hupeng@hupeng-vm shell]$echo $res [hupeng@hupeng-vm shell]$res=`expr + ` # expr的使用
[hupeng@hupeng-vm shell]$res=$(expr $a + $b)
[hupeng@hupeng-vm shell]$res=$(expr $a * $b)
expr: syntax error
[hupeng@hupeng-vm shell]$res=$(expr $a \* $b) # 乘号要用\*表示

以上只能进行整数运算,要进行浮点数运算,需要使用bc

[hupeng@hupeng-vm shell]$echo "2 * 2.3" | bc
4.6
[hupeng@hupeng-vm shell]$a=
[hupeng@hupeng-vm shell]$echo "$a * 1.5" | bc
4.5
[hupeng@hupeng-vm shell]$#其他参数可以置于要执行的具体操作之前,同时以分号作为定界符,通过stdin传给bc
[hupeng@hupeng-vm shell]$echo "scale=1;2 / 3" | bc #scale用来指定精度(小数点后的位数)
.
[hupeng@hupeng-vm shell]$echo "scale=2;2 / 3" | bc
.
[hupeng@hupeng-vm shell]$echo "scale=3;2 / 3" | bc
.
[hupeng@hupeng-vm shell]$n= #10进制
[hupeng@hupeng-vm shell]$echo "obase=2;$n" | bc #转换为二进制输出 [hupeng@hupeng-vm shell]$n=
[hupeng@hupeng-vm shell]$echo "obase=10;ibase=2;$n" | bc # 将二进制转化为10进制输出 [hupeng@hupeng-vm shell]$echo "sqrt(100)" | bc #求平方根 [hupeng@hupeng-vm shell]$echo "10 ^ 3" | bc #求幂 [hupeng@hupeng-vm shell]$echo "sqrt(-1)" | bc #不支持复数
Runtime error (func=(main), adr=): Square root of a negative number