Linux通过shell脚本计算网卡流量:

 
  
  1. #!/bin/bash 
  2. #mysql 启动脚本  
  3. #Author=ftqzy  
  4. #Modified=2011-11-25  
  5. #Version=1.0 
  6. #function=通过/proc/net/dev文件记录一段时间内的数值差,求得平均值,分别得到一段内跑的流量和在该时间段内平均每秒跑的速度 
  7. #System=CentOS 5.5 64bit 
  8.  
  9. echo -n  
  10. "请输入需要查询的网卡的接口:"  
  11. read eth  
  12.  
  13. echo "你要查询的网卡接口为"$eth  
  14.  
  15. echo -n  
  16. "输入需要等到的时间(秒):"  
  17. read sec  
  18.  
  19. echo "你计算的是"$sec"秒内的平均流量"  
  20.  
  21. #第一次读取网卡in与out的值,做为初始值 
  22. #In流量初始值: 
  23. in_=$(awk '/'$eth'/{print $1 }' /proc/net/dev |sed 's/'$eth'://')  
  24. #Out流量初始值: 
  25. out_=$(awk '/'$eth'/{print $9 }' /proc/net/dev)  
  26. #第一次网卡流量总和: 
  27. sum_=$(($in_ + $out_)) 
  28.  
  29. #使脚本休息$sec秒,计算$sec秒中产生的流量 
  30. sleep $sec"s" 
  31.  
  32. #第二次读取网卡in与out的值,使其与第一次读取的初始值相减得到在$sec秒中服务器所跑流量 
  33. #In流量: 
  34. _in=$(awk '/'$eth'/{print $1 }' /proc/net/dev |sed 's/'$eth'://')  
  35. #Out流量: 
  36. _out=$(awk '/'$eth'/{print $9 }' /proc/net/dev)  
  37. #In与Out流量总和 
  38. _sum=$(($inend+$outend)) 
  39. #在$sec秒中产生的流量: 
  40. sum=$(($_sum - $sum_))  
  41.  
  42. echo  
  43. $sec"秒内总流量为:"$sum"bytes"  
  44. #求得在$sec秒内,平均每秒所跑流量: 
  45. aver=$(($sum/$sec))  
  46. echo  
  47. "平均流量为:"$aver"bytes/sec"