98 lines
2.5 KiB
Bash
98 lines
2.5 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
# 找到主要網路介面(自動偵測)
|
||
|
INTERFACE=$(ip route | grep default | awk '{print $5}' | head -1)
|
||
|
|
||
|
if [ -z "$INTERFACE" ]; then
|
||
|
echo "找不到網路介面"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
echo "監控網路介面: $INTERFACE"
|
||
|
echo "按 Enter 鍵停止並顯示最終統計"
|
||
|
echo "----------------------------------------"
|
||
|
|
||
|
# 取得初始值
|
||
|
RX_FILE="/sys/class/net/$INTERFACE/statistics/rx_bytes"
|
||
|
TX_FILE="/sys/class/net/$INTERFACE/statistics/tx_bytes"
|
||
|
|
||
|
START_RX=$(cat $RX_FILE)
|
||
|
START_TX=$(cat $TX_FILE)
|
||
|
START_TIME=$(date)
|
||
|
|
||
|
RX_PREV=$START_RX
|
||
|
TX_PREV=$START_TX
|
||
|
|
||
|
# 背景監控循環
|
||
|
{
|
||
|
while true; do
|
||
|
sleep 1
|
||
|
|
||
|
# 取得當前值
|
||
|
RX_CURR=$(cat $RX_FILE)
|
||
|
TX_CURR=$(cat $TX_FILE)
|
||
|
|
||
|
# 計算速度(每秒差值)
|
||
|
RX_SPEED=$((RX_CURR - RX_PREV))
|
||
|
TX_SPEED=$((TX_CURR - TX_PREV))
|
||
|
|
||
|
# 計算累積量
|
||
|
RX_TOTAL=$((RX_CURR - START_RX))
|
||
|
TX_TOTAL=$((TX_CURR - START_TX))
|
||
|
TOTAL_CUMULATIVE=$((RX_TOTAL + TX_TOTAL))
|
||
|
|
||
|
# 轉換成人類可讀格式
|
||
|
RX_SPEED_H=$(numfmt --to=iec --suffix=B/s $RX_SPEED)
|
||
|
TX_SPEED_H=$(numfmt --to=iec --suffix=B/s $TX_SPEED)
|
||
|
RX_TOTAL_H=$(numfmt --to=iec --suffix=B $RX_TOTAL)
|
||
|
TX_TOTAL_H=$(numfmt --to=iec --suffix=B $TX_TOTAL)
|
||
|
TOTAL_H=$(numfmt --to=iec --suffix=B $TOTAL_CUMULATIVE)
|
||
|
|
||
|
# 顯示即時資訊(使用 \r 覆蓋前一行)
|
||
|
printf "\r速度 - 下載: %-10s 上傳: %-10s | 累積 - 下載: %-10s 上傳: %-10s 總計: %-10s" \
|
||
|
"$RX_SPEED_H" "$TX_SPEED_H" "$RX_TOTAL_H" "$TX_TOTAL_H" "$TOTAL_H"
|
||
|
|
||
|
# 更新前一次的值
|
||
|
RX_PREV=$RX_CURR
|
||
|
TX_PREV=$TX_CURR
|
||
|
done
|
||
|
} &
|
||
|
|
||
|
# 記錄背景進程 PID
|
||
|
MONITOR_PID=$!
|
||
|
|
||
|
# 等待用戶按 Enter
|
||
|
read -r
|
||
|
|
||
|
# 停止背景監控
|
||
|
kill $MONITOR_PID 2>/dev/null
|
||
|
|
||
|
# 取得最終數據
|
||
|
END_RX=$(cat $RX_FILE)
|
||
|
END_TX=$(cat $TX_FILE)
|
||
|
END_TIME=$(date)
|
||
|
|
||
|
# 計算最終累積量
|
||
|
FINAL_RX=$((END_RX - START_RX))
|
||
|
FINAL_TX=$((END_TX - START_TX))
|
||
|
FINAL_TOTAL=$((FINAL_RX + FINAL_TX))
|
||
|
|
||
|
# 轉換格式
|
||
|
FINAL_RX_H=$(numfmt --to=iec --suffix=B $FINAL_RX)
|
||
|
FINAL_TX_H=$(numfmt --to=iec --suffix=B $FINAL_TX)
|
||
|
FINAL_TOTAL_H=$(numfmt --to=iec --suffix=B $FINAL_TOTAL)
|
||
|
|
||
|
# 顯示最終統計
|
||
|
echo ""
|
||
|
echo ""
|
||
|
echo "============ 最終統計 ============"
|
||
|
echo "監控時間:"
|
||
|
echo " 開始: $START_TIME"
|
||
|
echo " 結束: $END_TIME"
|
||
|
echo ""
|
||
|
echo "總累積頻寬使用量:"
|
||
|
echo " 下載: $FINAL_RX_H"
|
||
|
echo " 上傳: $FINAL_TX_H"
|
||
|
echo " 總計: $FINAL_TOTAL_H"
|
||
|
echo "================================="
|