平时工作中需要写一些脚本完成服务器性能监控、动态配置启动脚本等,避免不了在Bash中进行数学运算,本文介绍几种常见的数学运算方法:
整数运算
Bash独立支持三种方法来完成整数运算
1,let
aneirin@host-1:~$ echo $value
3
aneirin@host-1:~$ let value=$value+1;echo $value
4
使用help let,可以查看let的帮助信息
2,declare
aneirin@host-1:~$ declare -i a=2 b=3 c=a*b
aneirin@host-1:~$ echo $a,$b,$c
2,3,6
这种方法使用较少
3,算术扩展即“$(())”
在Bash中可以使用“((...))”做数学运算,“$(( 数学表达式 ))”返回结果。
aneirin@host-1:~$ value=3
aneirin@host-1:~$ echo $((value+4))
7
aneirin@host-1:~$ ((value++))
aneirin@host-1:~$ echo $value
4
除了上面的三种Bash内置的数学计算方法外,还可以使用“expr”
aneirin@host-1:~$ expr 1+2
1+2
aneirin@host-1:~$ expr 1 + 2
3
aneirin@host-1:~$ expr 3 * 2
expr: non-integer argument
aneirin@host-1:~$ expr 3 \* 2
6
我不太喜欢expr,操作符和操作数要有空格,乘号需要转义,不友好。
浮点运算
上面介绍的方法仅能完成简单的整数运算,如果要实现带有小数点的运算,就需要依赖外部命令了,这里也介绍三种,
1,awk
aneirin@host-1:awk "BEGIN {print 100/3}"
33.3333
aneirin@host-1:awk "BEGIN {x=100/3; y=6; z=x*y; print z}"
200
aneirin@host-1:awk "BEGIN {printf \"%.2f\n\", 100/3}"
33.33
如果操作数是负数,注意操作数和操作符之间要有空格,
aneirin@host-1: awk "BEGIN {print -8.4 - -8}"
-0.4
2,printf
aneirin@host-1: printf %.3f "$((10**3 * 2/3))"
666.000
aneirin@host-1: printf %.1f "$((10**3 * 2/3))e-3"
0.7
aneirin@host-1: printf %.5f "$((10**3 * 2/3))e-3"
0.66600
3,bc
aneirin@host-1: echo "3.4+7/8-(5.94*3.14)" | bc
-15.25
aneirin@host-1: bc <<< "3.4+7/8-(5.94*3.14)"
-15.25
bc命令功能非常的丰富,如果想更近一步了解,可访问使用bc完成复杂计算
感谢你的阅读,希望这篇文章能帮到你!