Temat: sykrypt sysinfo.sh

Mam taki problem , na AA miałem zmieniony skrypt sysinfo.sh, ten powitalny po zalogowaniu, że pokazywał mi ilość podpięty klientów do AP.

Ten sam skrypt na BB nie pokazuje tej ilość pewno coś zmienili. Można by go znów ożywić ? i JAK ?

#!/bin/sh

hr() {
        if [ $1 -gt 0 ]; then
                printf "$(awk -v n=$1 'BEGIN{for(i=split("B KB MB GB TB PB",suffix);s<1;i--)s=n/(2**(10*i));printf (int(s)==s)?"%.0f%s":"%.1f%s",s,suffix[i+2]}' 2>/dev/null)"
        else
                printf "0B"
        fi
}

MACH=""
[ -e /tmp/sysinfo/model ] && MACH=$(cat /tmp/sysinfo/model)
[ -z "$MACH" ] && MACH=$(awk -F: '/Hardware/ {print $2}' /proc/cpuinfo)
[ -z "$MACH" ] && MACH=$(awk -F: '/machine/ {print $2}' /proc/cpuinfo)
[ -z "$MACH" ] && MACH=$(awk -F: '/system type/ {print $2}' /proc/cpuinfo)

U=$(cut -d. -f1 /proc/uptime)
D=$(expr $U / 60 / 60 / 24)
H=$(expr $U / 60 / 60 % 24)
M=$(expr $U / 60 % 60)
S=$(expr $U % 60)
U=$(printf "%dd, %02d:%02d:%02d" $D $H $M $S)

L=$(awk '{ print $1" "$2" "$3}' /proc/loadavg)

RFS=$(df /overlay 2>/dev/null | awk '/overlay/ {printf "%.0f:%.0f:%s", $4*1024, $2*1024, $5}')
if [ -n "$RFS" ]; then
        a1=$(echo $RFS | cut -f1 -d:)
        a2=$(echo $RFS | cut -f2 -d:)
        a3=$(echo $RFS | cut -f3 -d:)
        RFS="total: "$(hr $a2)", free: "$(hr $a1)", used: "$a3
fi

total_mem="$(awk '/^MemTotal:/ {print $2*1024}' /proc/meminfo)"
buffers_mem="$(awk '/^Buffers:/ {print $2*1024}' /proc/meminfo)"
cached_mem="$(awk '/^Cached:/ {print $2*1024}' /proc/meminfo)"
free_mem="$(awk '/^MemFree:/ {print $2*1024}' /proc/meminfo)"
free_mem="$(( ${free_mem} + ${buffers_mem} + ${cached_mem} ))"
MEM=$(echo "total: "$(hr $total_mem)", free: "$(hr $free_mem)", used: "$(( (total_mem - free_mem) * 100 / total_mem))"%")

LAN=$(uci -q get network.lan.ipaddr)
WAN=$(uci -q -P /var/state get network.wan.ipaddr)
[ -z "$WAN" ] && WAN=$(ifstatus wan | awk -F\" '/"address"/ {print $4}')
[ -n "$WAN" ] && WAN="$WAN, proto: "$(uci -q get network.wan.proto)

printf " | %-60s |\n" "Machine: $MACH"
printf " | %-60s |\n" "Uptime: $U"
printf " | %-60s |\n" "Load: $L"
printf " | %-60s |\n" "Flash: $RFS"
printf " | %-60s |\n" "Memory: $MEM"
printf " | %-60s |\n" "WAN: $WAN"
printf " | %-60s |\n" "LAN: $LAN"

IFACES=$(uci -q show wireless | grep device=radio | cut -f2 -d.)
for i in $IFACES; do
        SSID=$(uci -q get wireless.$i.ssid)
        DEV=$(uci -q get wireless.$i.device)
        OFF=$(uci -q get wireless.$DEV.disabled)
        OFF2=$(uci -q get wireless.$i.disabled)
        if [ -n "$SSID" ] && [ "x$OFF" != "x1" ] && [ "x$OFF2" != "x1" ]; then
      MODE=$(uci -q -P /var/state get wireless.$i.mode)
      RIFACE=$(uci -q -P /var/state get wireless.$i.ifname)
                        [ -n "$RIFACE" ] && CNT=$(iw dev $RIFACE station dump | grep Station | wc -l)
      CHANNEL=$(uci -q get wireless.$DEV.channel)
                printf " | %-60s |\n" "WLAN: mode: $MODE, ssid: $SSID, channel: $CHANNEL, conn: $CNT"
        fi
done

echo " ----------------------------------------------------------------"

Wszystkie posty dotyczą: TOTOLINK A7000R

2

Odp: sykrypt sysinfo.sh

Nie "coś zmienili" tylko wywaliłem to ze skryptu. uci -q -P /var/state get wireless.$i.ifname nie działa w BB bo już /var/state nie jest uzupełniany tymi danymi. Trzeba inaczej zczytać interfejs od wifi, np. bazując na danych w jsonie. Masz pracę domową więc po świętach żeby to zrobić.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.