脚本中调用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]#

应该还有其他更简单的方法,不过我现在用的是这个,如果看到的兄弟,帮忙留言更高效的算法,谢谢

写此文以留作记录,以备以后用的时候忘掉了。

 

  1. [root@localhost test]# cat aaa.sh  
  2. #!/bin/bash  
  3. # [root@localhost test]# free -m  
  4. #              total       used       free     shared    buffers     cached  
  5. # Mem:          7982        850       7132          0        130        573  
  6. # -/+ buffers/cache:        146       7836  
  7. # Swap:         8189          0       8189  
  8. #  
  9. # [root@localhost test]# /usr/bin/free -m|sed -n '2p;4p' 
  10. # Mem:          7982        850       7131          0        130        573  
  11. # Swap:         8189          0       8189  
  12. # 本脚本用来获取内存和swap使用量,并对内存使用量进行百分比计算,保留2位小数位
  13.  
  14. /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;  
  15. do  
  16. USED=`echo "scale=2; $MEM_USED*100/$MEM_TOTAL"|bc`  
  17. echo MEM_TOTAL=$MEM_TOTAL MEM_FREE=$MEM_FREE MEM_USED=$MEM_USED USED=$USED  
  18. done