Shell脚本实现的单机流量统计功能

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

代码如下:

#!/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

(0)

相关推荐

  • Shell脚本实现的单机流量统计功能

    在网上看到这个单机流量的脚本,挺不错的. 复制代码 代码如下: #!/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 &quo

  • php流量统计功能的实现代码

    流量统计功能 显示效果: 总访问量:399 今日流量:14 昨日流量:16 本代码仅供学习交流,其中必有不妥之处.请见谅! -- -- 表的结构 `mycounter` -- 复制代码 代码如下: CREATE TABLE `mycounter` ( `id` int(11) NOT NULL auto_increment, `Counter` int(11) NOT NULL, `CounterLastDay` int(10) default NULL, `CounterToday` int(

  • Shell脚本制作的终端会话回放功能脚本分享

    不久前在书上看到两个很有趣的命令--script和srciptreplay,它可以把终端会话记录到一个文件中,即是说我们可以通过终端会话来来制作命令行技巧视频教程,也可以与他人分享会话文件,而且生成的文件还只是一般的文本文件,文件的大小非常小,真是非常有意思.下面是本人写的两个shell程序,来方便进行这个有趣并有意义的操作. 一.实现代码 文件:Record.sh 复制代码 代码如下: #! /bin/bash  # Filename:Record.sh    read -p "Please

  • Shell脚本查看网卡实时流量

    复制代码 代码如下: #!/bin/bash while [ "1" ] do eth=$1 RXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}') TXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}') sleep 1 RXnext=$(cat /proc/net/dev | gr

  • Shell脚本实现删除一年前文件功能分享

    复制代码 代码如下: #!/bin/bash #Description: delete files #=====定义当前年份,月份以及文件所在目录=====# currentYear=`date +%Y`                                        currentMonth=`date  +%m |awk -F'0' '{print $2}'`   videodir=/var/video                                      

  • 统计网卡流量的两段shell脚本(使用ifconfig)

    使用shell脚本计算Linux网卡流量,方法中最关键点: 复制代码 代码如下: ifconfig $eth_name | grep bytes | awk '{print $6}' | awk -F : '{print $2}' 通过ifconfig eth0|grep bytes 得到输入输出的流量. 复制代码 代码如下: /@rac2=>dd2$ifconfig eth0|grep bytes RX bytes:1638005313300 (1.4 TiB) TX bytes:340806

  • shell脚本学习指南[五](Arnold Robbins & Nelson H.F. Beebe著)

    作者告诉我们:到目前为止基础已经搞定,可以将前边所学结合shell变成进军中等难度的任务了.激动的要哭了,终于看到本书结束的曙光了 T T .码字比码代码还辛苦.不过令人兴奋的是立刻就学以致用了,花了一天半的时间处理了一个3.8G的服务器日志文件,你妹啊,破电脑内存才2G.不过切割化小然后写了几个awk文件和sh文件按规则处理合并,算是搞定了! 第十一章扩展实例:合并用户数据库 问题描述就是有两台UNIX的计算机系统,这两个系统现在要合并,用户群同样需要合并.有许多用户两台系统上都有帐号.现在合

  • 下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能

    Cerberus FTP Server 是一个 FTP 服务器软件,它在为用户提供专业级别的安全 SSL/TLS 加密标准和强大的 FTP 服务器性能的同时还保持了简单易用的特点.软件占用 CPU 和内存很少,拥有友好的用户界面,可以通过系统托盘图标快速访问.程序支持多网卡环境,支持与系统用户帐号集成以及活动目录,支持续传,用户权限控制,连接数限制,超时设置,IP 地址自动阻止和黑名单等多种功能,支持安装为系统服务以实现无需登录系统即可提供服务:提供实时监视功能,可实时查看用户操作状态或断开.阻

  • 关于Shell脚本效率优化的一些个人想法

    一.先说一下Shell脚本语言自身的局限性 作为解释型的脚本语言,天生就有效率上边的缺陷.尽管它调用的其他命令可能效率上是不错的. Shell脚本程序的执行是顺序执行,而非并行执行的.这很大程度上浪费了可能能利用上的系统资源. Shell每执行一个命令就创建一个新的进程,如果脚本编写者没有这方面意识,编写脚本不当的话,是非常浪费系统资源的. 二.我们在Shell脚本语言的局限性上尽可能的通过我们有经验的编码来提高脚本的效率. 1.比如我想做一个循环处理数据,可能是简单的处理一下数据,这样会让人比

  • Linux启动jar包的shell脚本

    背景: 项目设备端需要运行jar包程序与服务端进行socket连接并发送数据,每次启动进程时,都需要在Linux终端输入启动jar包的命令,比较繁琐,随之尝试将启动jar包的命令写入shell脚本文件中,实现操作shell脚本启动jar包程序的功能. 编写的socdev.sh脚本文件中命令如下: #启动命令所在目录 HOME='/home/pi/Desktop/java' #获取mac地址(唯一的) mac=`ifconfig | grep eth0 | awk '{print $5}'` st

随机推荐