编写shell脚本统计某个时间段内本机的流量


下面是我的wlan0网卡的输出信息,你可以使用ifconfig 或者 ifconfig | sed -n ‘/wlan0/,10p‘ 获取显示的信息的格式

wlan0     Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  

          inet addr:172.29.164.251  Bcast:172.29.167.255  Mask:255.255.248.0

          inet6 addr: 2001:da8:c803:4a57:e190:606f:3155:9369/64 Scope:Global

          inet6 addr: fe80::6e71:d9ff:fe0b:27f6/64 Scope:Link

          inet6 addr: 2001:da8:c803:4a57:6e71:d9ff:fe0b:27f6/64 Scope:Global

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:1305 errors:0 dropped:0 overruns:0 frame:0

          TX packets:647 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:370741 (362.0 KiB)  TX bytes:117872 (115.1 KiB)


下面的脚本通过获取最后一行的RX、TX的信息,在两个时间点上获取,然后统计这一段时间内的总流量。

最后打印输出统计信息在屏幕上。

#!/bin/bash

#network traffic statistics

#Write by Ricardo.su 2015-04-30


TIME_RANGE=10


time=`date +%m"-"%d" "%k":"%M`


rx_point_1=`ifconfig wlan0 | grep [[:space:]]RX.*TX | awk ‘{print $2}‘ | cut -c7-`

tx_point_1=`ifconfig wlan0 | grep [[:space:]]RX.*TX | awk ‘{print $6}‘ | cut -c7-`


sleep $TIME_RANGE


rx_point_2=`ifconfig wlan0 | grep [[:space:]]RX.*TX | awk ‘{print $2}‘ | cut -c7-`

tx_point_2=`ifconfig wlan0 | grep [[:space:]]RX.*TX | awk ‘{print $6}‘ | cut -c7-`


rx_rs=$(((rx_point_2-rx_point_1)/1024))

tx_rs=$(((tx_point_2-tx_point_1)/1024))

echo "Date $time"

echo "Average Network Traffic in $TIME_RANGE s: RX $rx_rs KB TX $tx_rs KB"



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。