Shell脚本实现的单机流量统计功能
Shell脚本实现的单机流量统计功能
发布时间:2016-12-28 来源:查字典编辑
摘要:在网上看到这个单机流量的脚本,挺不错的。复制代码代码如下:#!/bin/shusage(){echo“Usage:$0[-iINTERFAC...

在网上看到这个单机流量的脚本,挺不错的。

复制代码 代码如下:

#!/bin/sh

usage(){

echo “Usage: $0 [-i INTERFACE] [-s INTERVAL] [-c COUNT]”

echo

echo “-i INTERFACE”

echo “ The interface to monitor, default is eth0.”

echo “-s INTERVAL”

echo “ The time to wait in seconds between measurements, default is 3 seconds.”

echo “-c COUNT”

echo “ The number of times to measure, default is 10 times.”

exit 3

}

readargs(){

while [ "$#" -gt 0 ] ; do

case “$1″ in

-i)

if [ "$2" ] ; then

interface=”$2″

shift ; shift

else

echo “Missing a value for $1.”

echo

shift

usage

fi

;;

-s)

if [ "$2" ] ; then

sleep=”$2″

shift ; shift

else

echo “Missing a value for $1.”

echo

shift

usage

fi

;;

-c)

if [ "$2" ] ; then

counter=”$2″

shift ; shift

else

echo “Missing a value for $1.”

echo

shift

usage

fi

;;

*)

echo “Unknown option $1.”

echo

shift

usage

;;

esac

done

}

checkargs(){

if [ ! "$interface" ] ; then

interface=”eth0″

fi

if [ ! "$sleep" ] ; then

sleep=”3″

fi

if [ ! "$counter" ] ; then

counter=”10″

fi

}

printrxbytes(){

/sbin/ifconfig “$interface” | grep “RX bytes” | cut -d: -f2 | awk ‘{ print $1 }'

}

printtxbytes(){

/sbin/ifconfig “$interface” | grep “TX bytes” | cut -d: -f3 | awk ‘{ print $1 }'

}

bytestohumanreadable(){

multiplier=”0″

number=”$1″

while [ "$number" -ge 1024 ] ; do

multiplier=$(($multiplier+1))

number=$(($number/1024))

done

case “$multiplier” in

1)

echo “$number Kb”

;;

2)

echo “$number Mb”

;;

3)

echo “$number Gb”

;;

4)

echo “$number Tb”

;;

*)

echo “$1 b”

;;

esac

}

printresults(){

while [ "$counter" -ge 0 ] ; do

counter=$(($counter – 1))

if [ "$rxbytes" ] ; then

oldrxbytes=”$rxbytes”

oldtxbytes=”$txbytes”

fi

rxbytes=$(printrxbytes)

txbytes=$(printtxbytes)

if [ "$oldrxbytes" -a "$rxbytes" -a "$oldtxbytes" -a "$txbytes" ] ; then

echo “$(/bin/date +%Y%m%d-%H%M%S) RXbytes = $(bytestohumanreadable $(($rxbytes – $oldrxbytes))) TXbytes = $(bytestohumanreadable $(($txbytes – $oldtxbytes)))”

else

echo “Monitoring $interface every $sleep seconds. (RXbyte total = $(bytestohumanreadable $rxbytes) TXbytes total = $(bytestohumanreadable $txbytes))”

fi

sleep “$sleep”

done

}

readargs “$@”

checkargs

printresults

测试如下:

每三秒的流量,总输出999行,可以输出到文件里,其中:前面为时间,Rx Packets 是接收数据包,即下载,Tx Packets 是发送数据包,即上传.

复制代码 代码如下:

[root@host]#sh t.sh -c 999 Monitoring eth0 every 3 seconds. (RXbyte total = 6 Tb TXbytes total = 5 Tb)

20101105-201539 RXbytes = 126 Kb TXbytes = 658 Kb

20101105-201542 RXbytes = 87 Kb TXbytes = 487 Kb

20101105-201545 RXbytes = 159 Kb TXbytes = 668 Kb

20101105-201548 RXbytes = 107 Kb TXbytes = 725 Kb

20101105-201551 RXbytes = 110 Kb TXbytes = 704 Kb

20101105-201554 RXbytes = 90 Kb TXbytes = 726 Kb

20101105-201558 RXbytes = 100 Kb TXbytes = 850 Kb

20101105-201601 RXbytes = 102 Kb TXbytes = 703 Kb

20101105-201604 RXbytes = 168 Kb TXbytes = 693 Kb

20101105-201607 RXbytes = 105 Kb TXbytes = 730 Kb

20101105-201610 RXbytes = 133 Kb TXbytes = 711 Kb

20101105-201613 RXbytes = 431 Kb TXbytes = 703 Kb

20101105-201616 RXbytes = 84 Kb TXbytes = 527 Kb

20101105-201619 RXbytes = 239 Kb TXbytes = 825 Kb

20101105-201622 RXbytes = 117 Kb TXbytes = 801 Kb

20101105-201625 RXbytes = 99 Kb TXbytes = 913 Kb

20101105-201628 RXbytes = 89 Kb TXbytes = 322 Kb

20101105-201631 RXbytes = 63 Kb TXbytes = 73 Kb

20101105-201634 RXbytes = 84 Kb TXbytes = 191 Kb

20101105-201637 RXbytes = 174 Kb TXbytes = 481 Kb

20101105-201640 RXbytes = 120 Kb TXbytes = 383 Kb

20101105-201643 RXbytes = 94 Kb TXbytes = 496 Kb

20101105-201646 RXbytes = 108 Kb TXbytes = 340 Kb

20101105-201649 RXbytes = 91 Kb TXbytes = 639 Kb

20101105-201652 RXbytes = 106 Kb TXbytes = 629 Kb

20101105-201655 RXbytes = 125 Kb TXbytes = 496 Kb

20101105-201658 RXbytes = 90 Kb TXbytes = 537 Kb

20101105-201701 RXbytes = 114 Kb TXbytes = 641 Kb

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新linuxshell学习
热门linuxshell学习
脚本专栏子分类