如何在Shell中进行数学运算

平时工作中需要写一些脚本完成服务器性能监控、动态配置启动脚本等,避免不了在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完成复杂计算
感谢你的阅读,希望这篇文章能帮到你!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。