基于Shell实现的网络测速脚本方案及实现方法,包含基础测速、实时监控、带宽测试三类功能模块:
一、基础网络测速脚本
- 网络延迟测试(Ping)
#!/bin/bash
# 测试目标主机的延迟和丢包率:ml-citation{ref="1,7" data="citationList"}
TARGET="8.8.8.8" # 可替换为任意IP或域名
PACKETS=10 # 发送数据包数量
echo "测试目标: $TARGET"
ping_result=$(ping -c $PACKETS -i 0.5 -W 1 $TARGET)
avg_latency=$(echo "$ping_result" | grep rtt | awk '{print $4}' | cut -d '/' -f 2)
loss_rate=$(echo "$ping_result" | grep loss | awk '{print $6}' | tr -d '%')
echo "平均延迟: ${avg_latency}ms"
echo "丢包率: ${loss_rate}%"
输出示例:
测试目标: 8.8.8.8
平均延迟: 25.4ms
丢包率: 0%
- 带宽测试(Speedtest-cli)
#!/bin/bash
# 需提前安装speedtest-cli工具:ml-citation{ref="2,8" data="citationList"}
if ! command -v speedtest-cli &> /dev/null; then
echo "安装speedtest-cli工具..."
curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python3 -
fi
echo "开始带宽测试..."
result=$(speedtest-cli --simple --timeout 10)
download=$(echo "$result" | grep Download | awk '{print $2}')
upload=$(echo "$result" | grep Upload | awk '{print $2}')
echo "下载速度: ${download}Mbit/s"
echo "上传速度: ${upload}Mbit/s"
输出示例:
开始带宽测试...
下载速度: 98.76Mbit/s
上传速度: 45.32Mbit/s
二、实时网速监控脚本
#!/bin/bash
# 监控指定网卡的实时传输速率:ml-citation{ref="5,6" data="citationList"}
eth="eth0" # 替换为实际网卡名
echo "监控网卡: $eth (按Ctrl+C退出)"
while true; do
RX_pre=$(cat /proc/net/dev | grep $eth | sed 's/:/ /g' | awk '{print $2}')
TX_pre=$(cat /proc/net/dev | grep $eth | sed 's/:/ /g' | awk '{print $10}')
sleep 1
RX_next=$(cat /proc/net/dev | grep $eth | sed 's/:/ /g' | awk '{print $2}')
TX_next=$(cat /proc/net/dev | grep $eth | sed 's/:/ /g' | awk '{print $10}')
# 计算差值并转换单位
RX=$((RX_next - RX_pre))
TX=$((TX_next - TX_pre))
RX_hr=$(numfmt --to=iec $RX)
TX_hr=$(numfmt --to=iec $TX)
printf "[%s] RX: %-8s TX: %-8s\\n" "$(date +%T)" "$RX_hr/s" "$TX_hr/s"
done
输出示例:
[14:23:05] RX: 1.2MB/s TX: 560KB/s
[14:23:06] RX: 980KB/s TX: 320KB/s
三、定时任务配置日志记录
通过crontab -e添加定时任务,每30分钟执行测速并记录日志:
*/30 * * * * /path/to/speedtest_script.sh >> /var/log/speedtest.log 2>&1