diff --git a/bandwidth_monitor.sh b/bandwidth_monitor.sh new file mode 100644 index 0000000..e87e417 --- /dev/null +++ b/bandwidth_monitor.sh @@ -0,0 +1,97 @@ +#!/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 "================================="