目的
脚本范例
#!/bin/bash
# bond_traffic_monitor.sh
INTERVAL=2 # 刷新间隔(秒)
BOND_IFACE="bond0"
SLAVES=("eth0" "eth1" "eth2" "eth3")
# 获取初始值
declare -A rx_start tx_start
for iface in "${SLAVES[@]}" "$BOND_IFACE"; do
rx_start[$iface]=$(cat /sys/class/net/$iface/statistics/rx_bytes)
tx_start[$iface]=$(cat /sys/class/net/$iface/statistics/tx_bytes)
done
echo "监控 Bond 接口流量 - 按 Ctrl+C 退出"
echo "接口 RX速率 TX速率 RX总量 TX总量"
echo "----------------------------------------------------"
while true; do
sleep $INTERVAL
# 获取当前值并计算差值
echo "================================"
for iface in "${SLAVES[@]}" "$BOND_IFACE"; do
rx_current=$(cat /sys/class/net/$iface/statistics/rx_bytes)
tx_current=$(cat /sys/class/net/$iface/statistics/tx_bytes)
rx_diff=$((($rx_current - ${rx_start[$iface]}) / INTERVAL))
tx_diff=$((($tx_current - ${tx_start[$iface]}) / INTERVAL))
rx_total=$(($rx_current - ${rx_start[$iface]}))
tx_total=$(($tx_current - ${tx_start[$iface]}))
printf "%-8s %8s/s %8s/s %10s %10s\n" \
"$iface" \
"$(numfmt --to=iec $rx_diff)" \
"$(numfmt --to=iec $tx_diff)" \
"$(numfmt --to=iec $rx_total)" \
"$(numfmt --to=iec $tx_total)"
# 更新起始值
rx_start[$iface]=$rx_current
tx_start[$iface]=$tx_current
done
done