#!/bin/dash print_state() { case "$1" in eth*) echo ethernet ;; wlan*) echo wireless ;; usb*) echo tethering ;; *) echo disconnected ;; esac } wifi_strength() { if [ "$1" -le -80 ]; then echo terrible elif [ "$1" -le -70 ]; then echo bad elif [ "$1" -le -60 ]; then echo mediocre elif [ "$1" -le -40 ]; then echo good else echo excellent fi } print_infos() { if [ -n "$1" ]; then route_line=$(ip route show dev "$1" | awk '($1 == "default") { print }') printf ',"ip":{"local":"%s","gateway":"%s"}' \ "$(echo "$route_line" | awk '{ print $7 }')" \ "$(echo "$route_line" | awk '{ print $3 }')" if [ "$state" = wireless ]; then signal=$(iw dev "$1" link | awk '($1 == "signal:") { print $2}') printf ',"wifi":{"signal":"%s","ssid":"%s"}' \ "$(wifi_strength "$signal")" \ "$(iw dev wlan0 info | grep '^\s*ssid ' | xargs | cut -d \ -f 2-)" fi fi } print_network_status() { device=$(ip route | awk '($1 == "default") { print $5 }') state=$(print_state "$device") printf '{"state":"%s"%s}\n' \ "$state" \ "$(print_infos "$device")" } print_network_status tail -f -n 0 /run/dhcpcd/log /var/log/iwd/current | \ while read -r _unused; do print_network_status done