Linux下使用Shell对网络流量进行监控


#input the network name
 
if [ -n "$1" ]; then
    eth_name=$1
else
    eth_name="eth0"
fi
 
send_o=`ifconfig $eth_name | grep bytes | awk '{print $6}' | awk -F : '{print $2}'`
recv_o=`ifconfig $eth_name | grep bytes | awk '{print $2}' | awk -F : '{print $2}'`
 
send_n=$send_o
recv_n=$recv_o
 
i=0
while [ $i -le 100000 ]; do
    send_l=$send_n
    recv_l=$recv_n
    sleep 2
    send_n=`ifconfig $eth_name | grep bytes | awk '{print $6}' | awk -F : '{print $2}'`
    recv_n=`ifconfig $eth_name | grep bytes | awk '{print $2}' | awk -F : '{print $2}'`
    i=`expr $i + 1`
 
    send_r=`expr $send_n - $send_l`
    recv_r=`expr $recv_n - $recv_l`
    total_r=`expr $send_r + $recv_r`
    send_ra=`expr \( $send_n - $send_o \) / $i`
    recv_ra=`expr \( $recv_n - $recv_o \) / $i`
    total_ra=`expr $send_ra + $recv_ra`
    sendn=`ifconfig $eth_name | grep bytes | awk -F \( '{print $3}' | awk -F \) '{print $1}'`
    recvn=`ifconfig $eth_name | grep bytes | awk -F \( '{print $2}' | awk -F \) '{print $1}'`
    clear
    echo "Last second : Send rate: $send_r Bytes/sec Recv rate: $recv_r Bytes/sec Total rate: $total_r Bytes/sec"
    echo "Average value: Send rate: $send_ra Bytes/sec Recv rate: $recv_ra Bytes/sec Total rate: $total_ra Bytes/sec"
    echo "Total traffic after startup: Send traffic: $sendn Recv traffic: $recvn"
done

\

这其中个使用到了,如下常用的shell命令:
变量字符串是否为空
要运行命令需要使用 ·· 作为命令的应用
while 循环的基本写法
一些数学表达式的使用
对于输出的一些特殊符号的转义写法

相关内容