#!/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 "================================="