脚本中调用bc计算指定小数位的百分数
打算设计一套性能统计脚本,记录各服务器的各种状态值,并对一些可以计算百分比的地方进行计算并统计这里的思路是用shell脚本进行计算数据并统计,当然也会保留原始的数据,以便于有更高效的计算方法的时候随时改变计算方法。 保留原始数据的方法,此处不解释,此处只解释shell中脚本计算关于小数点的保留方法
刚开始的时候,一直以为这样算就能求出百分数。
var3=$[var1/var2]
后来发现,用这个小脚本算完的var3,没有小数点,也就是精确到整数位,而如果你的值本来就很小,他会显示0%,很悲剧了,后来试验了一下,在后边加上*100,还是显示0,很悲剧,加到前边就ok了。虽然是能算出数了,可是仍然只是整数。我想要留2位小数,所以就得靠计算器bc了。
下边这个就是bc的用法。scale=4;是指留4位小数。记住那个100要在前边乘,不然的话你只能看到杯具,如下所示:
[root@localhost test]# bc -q
23/4523
0
23*100/4532
0
scale=4;
23/4532*100
.5000
23*100/4532
.5075
quit
[root@localhost test]#
应该还有其他更简单的方法,不过我现在用的是这个,如果看到的兄弟,帮忙留言更高效的算法,谢谢
写此文以留作记录,以备以后用的时候忘掉了。
- [root@localhost test]# cat aaa.sh
- #!/bin/bash
- # [root@localhost test]# free -m
- # total used free shared buffers cached
- # Mem: 7982 850 7132 0 130 573
- # -/+ buffers/cache: 146 7836
- # Swap: 8189 0 8189
- #
- # [root@localhost test]# /usr/bin/free -m|sed -n '2p;4p'
- # Mem: 7982 850 7131 0 130 573
- # Swap: 8189 0 8189
- # 本脚本用来获取内存和swap使用量,并对内存使用量进行百分比计算,保留2位小数位
- /usr/bin/free -m|sed -n '2p;4p'|gawk '{print $2,$3,$4}'|xargs|gawk '{print $1,$2,$3,$4,$6}'|while read MEM_TOTAL MEM_USED MEM_FREE SWAP_TOTAL SWAP_FREE;
- do
- USED=`echo "scale=2; $MEM_USED*100/$MEM_TOTAL"|bc`
- echo MEM_TOTAL=$MEM_TOTAL MEM_FREE=$MEM_FREE MEM_USED=$MEM_USED USED=$USED
- done