#!/bin/bash INTERVAL=3 # interfaces for desktop and laptop INTERFACES="enp6s0 wlp0s29u1u1 wlp56s0" print_bytes() { if [ "$1" -eq 0 ] || [ "$1" -lt 1000 ]; then bytes="0" elif [ "$1" -lt 1000000 ]; then bytes="$(echo "scale=0;$1/1000" | bc -l)k" else bytes="$(echo "scale=1;$1/1000000" | bc -l)M" fi echo "$bytes" } print_bit() { if [ "$1" -eq 0 ] || [ "$1" -lt 10 ]; then bit="0 B" elif [ "$1" -lt 100 ]; then bit="$(echo "scale=0;$1*8" | bc -l) B" elif [ "$1" -lt 100000 ]; then bit="$(echo "scale=0;$1*8/1000" | bc -l) K" else bit="$(echo "scale=1;$1*8/1000000" | bc -l) M" fi echo "$bit" } declare -A bytes get_initial_throughput() { for interface in $INTERFACES; do local dir="/sys/class/net/$interface" if [ -d "$dir" ]; then bytes[past_rx_$interface]="$(cat "$dir"/statistics/rx_bytes)" bytes[past_tx_$interface]="$(cat "$dir"/statistics/tx_bytes)" fi done } get_throughput() { while true; do down=0 up=0 for interface in $INTERFACES; do local dir="/sys/class/net/$interface" if [ -d "$dir" ]; then bytes[now_rx_$interface]="$(cat "$dir"/statistics/rx_bytes)" bytes[now_tx_$interface]="$(cat "$dir"/statistics/tx_bytes)" bytes_down=$((((${bytes[now_rx_$interface]} - ${bytes[past_rx_$interface]})) / INTERVAL)) bytes_up=$((((${bytes[now_tx_$interface]} - ${bytes[past_tx_$interface]})) / INTERVAL)) down=$(((("$down" + "$bytes_down")))) up=$(((("$up" + "$bytes_up")))) bytes[past_rx_$interface]=${bytes[now_rx_$interface]} bytes[past_tx_$interface]=${bytes[now_tx_$interface]} fi done if [ "$down" -gt 1000 ] || [ "$up" -gt 1000 ]; then echo " $(print_bytes $down) 祝$(print_bytes $up)" else echo "" fi # echo "Download: $(print_bytes $down) / Upload: $(print_bytes $up)" # echo "Download: $(print_bit $down) / Upload: $(print_bit $up)" sleep $INTERVAL done } get_initial_throughput get_throughput