Boah ey. Subshells sind ekelhaft
Hab noch ein bisschen getweaked damit's einfacher mit den Variablen wird.
Der sed - aufruf für die Geräteliste liefert im übrigen definitiv nicht "Name : deviceName" zurück sondern die Zeile 1:1 wie aus dem original-Aufruf. Da würde auch ein simples 'grep "Device:"' reichen:
Code:
#!/usr/bin/env bash
echo "Network information:"
echo "===================="
LISTSERVICES="networksetup -listnetworkserviceorder"
AIRPORTI="airport -I"
# WIFI
WLANACTIVE=1
($AIRPORTI|grep -q 'AirPort: Off') && WLANACTIVE=0
# Entsprechend 'schöne' Ausgaben erzeugen
if (( WLANACTIVE )); then
while read line; do
case "$line" in
agrCtlRSSI:*)
QUALITY=${line##*: }
;;
lastTxRate:*)
SPEED=${line##*: }
;;
SSID:*)
SSID=${line##*: }
;;
channel:*)
CHANNEL=${line##*: }
;;
*)
;;
esac
done < <($AIRPORTI)
if [ "$SSID" = "SSID:" ]; then
echo "WIFI: enabled (not connected)"
else
echo "WIFI: enabled"
echo "Network: $SSID"
echo "Speed: $SPEED Mbit/s"
echo "Quality: $QUALITY
dB"
fi
else
echo "WIFI: disabled"
fi
# make some lines
echo
echo
# Devices
while read device; do
# Erst vorne, dann hinten abschneiden, jeweils für Name und Interfacename
NAME=${device#*: }
NAME=${NAME%%,*)}
IFACE=${device##*: }
IFACE=${IFACE%%)}
case "$IFACE" in
en*)
echo "Interface: $NAME : $IFACE"
ifconfig $IFACE
# TODO: hier muß erweitert werden
;;
*)
;;
esac
done < <($LISTSERVICES|grep "Device:")
Gibts eigentlich ne Möglichkeit die Ausgabe nach enX zu sortieren und nicht einfach nur Zeilenweise durch den Input durchzuorgeln? (Ich weiss, jetzt wirds unverschämt
).