Linux查看实时网速的shell
What
这是一个可以查看Linux主机实时网速的shell脚本,它能够根据网速自动调整单位以便更好的显示网速。
Linux显示实时网速的shell
Why
在工作过程中,会遇到服务器非常卡顿的情况,因为服务器是多人同时使用的,为了全面的分析服务器卡顿的原因,依次检查了CPU、内存、磁盘IO的情况,但是都没有发现明显异常,故想到了诊断网络,以便综合判断服务器状态,于是诞生了这个Shell
How
基本使用方法
./net.sh [网卡]
例如:查看网卡eth0的网速:
./net.sh eth0
开启DEBUG
这里仅提供通过修改源码的方式开启DEBUG模式,具体方式为:
对脚本中的DEBUG变量赋任意值
DEBUG=true
Source Code
如需转载,请说明出处
#!/bin/bash
#net.sh
# about
# 此shell用于显示实时网速
# author:masterc
# date:2021.03.19
# version:1.0
# 如需开启DEBUG,给DEBUG赋任意值即可
DEBUG=
# 计算网速
function getRate(){
rate=$1
result="${rate}"
if [ ${rate} -gt 1024 ];then
rate=`expr ${rate} / 1024`
rate_p=`expr ${rate} % 1024`
result="${rate}.${rate_p}"
fi
echo $result
}
# 计算量程
function getUnit(){
rate=$1
result="KB/s"
if [ $rate -gt 1024 ];then
result="MB/s"
fi
echo $result
}
function main(){
# 要监听的网卡
net_card=$1
if [ ! $net_card ];then
echo "net card is not selected!"
else
echo "net card:$net_card"
fi
#初始化
# awk 'NR==8{print}' : 取ifconfig结果的第8行,可根据ifconfig结果做具体调整
# awk -F '[(:]' '{print $4}' : 取上传字节数
# awk -F '[(:]' '{print $2}' : 取下载字节数
up_rate1=`ifconfig $net_card | awk 'NR==8{print}' | awk -F '[(:]' '{print $4}'`
down_rate1=`ifconfig $net_card | awk 'NR==8{print}' | awk -F '[(:]' '{print $2}'`
up_rate2=0
down_rate2=0
while true
do
sleep 1
up_rate2=`ifconfig $net_card | awk 'NR==8{print}' | awk -F '[(:]' '{print $4}'`
down_rate2=`ifconfig $net_card | awk 'NR==8{print}' | awk -F '[(:]' '{print $2}'`
# DEBUG
if [ $DEBUG ];then
echo "up_rate1:${up_rate1},down_rate1:${down_rate1}"
echo "up_rate2:${up_rate2},down_rate2:${down_rate2}"
fi
# 取差值
up_rate=`expr $up_rate2 - $up_rate1`
down_rate=`expr $down_rate2 - $down_rate1`
# 记录旧值
up_rate1=$up_rate2
down_rate1=$down_rate2
# 单位转换 B -> KB
up_rate=`expr $up_rate / 1024`
down_rate=`expr $down_rate / 1024`
# \r用于每次输出后将光标重新定位到开头
printf "\r[UP:%6.1f %s,DOWN:%6.1f %s]" `getRate $up_rate` `getUnit $up_rate` `getRate $down_rate` `getUnit $down_rate`
done
}
main $@