当前位置 博文首页 > Shell脚本实现的单机流量统计功能

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

    作者:admin 时间:2021-06-14 18:29

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

    复制代码 代码如下:

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

    js
下一篇:没有了