#!/usr/bin/env bash CACHE="/tmp/waybar-net" iface=$(ip route get 8.8.8.8 2>/dev/null | awk '{for(i=1;i<=NF;i++) if($i=="dev") print $(i+1)}' | head -1) if [ -z "$iface" ]; then echo "↑0B ↓0B" exit 0 fi rx=$(cat /sys/class/net/$iface/statistics/rx_bytes 2>/dev/null || echo 0) tx=$(cat /sys/class/net/$iface/statistics/tx_bytes 2>/dev/null || echo 0) now=$(date +%s%3N) if [ -f "$CACHE" ]; then read -r prev_rx prev_tx prev_time < "$CACHE" dt=$(( now - prev_time )) [ "$dt" -le 0 ] && dt=1000 up=$(( (tx - prev_tx) * 1000 / dt )) down=$(( (rx - prev_rx) * 1000 / dt )) else up=0; down=0 fi echo "$rx $tx $now" > "$CACHE" fmt() { local b=$1 if [ "$b" -ge 1073741824 ]; then printf "%4s" "$(( b / 1073741824 ))G" elif [ "$b" -ge 1048576 ]; then printf "%4s" "$(( b / 1048576 ))M" elif [ "$b" -ge 1024 ]; then printf "%4s" "$(( b / 1024 ))K" else printf "%4s" "${b}B" fi } echo "↑$(fmt "$up")/s ↓$(fmt "$down")/s"