![]() |
Betriebssystem: Mac OS,Linux
Gute Tutorials / Beispiele zu sed und awk gesucht
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich bastel gerade an meinem neuen MacBook Air rum, und zwar erstelle ich gerade einen neuen Desktop (siehe Screenshot). Die Ausgaben (Uhrzeit/Datum, Systemname, Batteriestatus, Wlan-Info) zeige ich mittels ![]() Geektool führt Kommandozeilenscripte aus und schreibt deren Ausgabe 1:1 auf den Desktop. Nun will ich noch komplexere Ausgaben machen: einzelne Network-Interfaces nur dann anzeigen, wenn sie auch an sind (z.B. iPhone-Bluetooth oder USB-Tethering, USB-Ethernet-Adapter) etc. mit Netwerk-SSID (wenn WLAN) und erhaltener IP-Adresse etc. Die ganzen Infos erhalte ich mittels Kommandozeilentools, aber zum Teil sind dafür mehrere Aufrufe notwendig (z.B. "networksetup -listnetworkserviceorder | grep Device:", und was dann nach Device steht als input für ifconfig nehmen um den Status und die IP-Adressen aus der inet-Zeile ("inet 192.168.178.34 netmask 0xffffff00 broadcast 192.168.178.255") auszulesen). Ich suche nun gute / erprobte Dokumentationen, Cheatsheets oder Tutorials für sed, awk und generell Shell-Scripting auf Unixoiden Betriebssystemen, so dass ich mir die einzelnen Werte aus der Ausgabe eines Kommandos als Input in einen (oder mehrere) Aufrufe anderer Kommandos schieben kann und mir so meine Ausgabe selber zusammenstellen kann. Wer hat hier eine taugliche Linksammlung zu Shellscripting, sed, awk, grep etc.? |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Die ersten beiden habe ich selber (und gelesen):
Ansonsten zu sed: ![]() awk ist zwar mächtig, aber ich benutze es trotzdem höchst selten. Zu Bash gibt es haufenweise Quellen im Netz, aber stell doch einfach mal ein paar konkrete Fragen. Auch wenn ich keinen Mac zur Hand habe, kann man oft schon anhand der Ausgabe und dem Teil den du extrahieren willst Code schreiben ... Nachtrag:
|
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Ja, es ist bash. Das Tool 'ip' habe ich hier auf OSX Snow Leopard aber nicht.
Ich habe z.B. folgende Ausgaben:
Code:
Das heisst hiermit kann ich ermitteln, ob das WLAN an ist, wenn ja wie die SSID ist und die aktuelle Geschwindigkeit (lastTxRate) und die Empfangsqualität (agrCtlRSSI) in Db.
Last login: Thu Dec 30 22:58:25 on ttys001
smartair:~ Sebastian$ airport -I AirPort: Off smartair:~ Sebastian$ networksetup -setairportpower en0 on smartair:~ Sebastian$ airport -I agrCtlRSSI: -59 agrExtRSSI: 0 agrCtlNoise: -95 agrExtNoise: 0 state: running op mode: station lastTxRate: 130 maxRate: 144 lastAssocStatus: 0 802.11 auth: open link auth: wpa2-psk BSSID: 0:24:fe:44:d0:7b SSID: smartNet MCS: 15 channel: 1 smartair:~ Sebastian$ Welche Geräte welchen sprechenden Namen haben sehe ich hier:
Code:
Wie man sieht reicht die untere Ausgabe um den sprechenden Namen und den Interface-Namen zu ermitteln.
smartair:~ Sebastian$ networksetup -listnetworkserviceorder
An asterisk (*) denotes that a network service is disabled. (1) Bluetooth DUN (Hardware Port: Bluetooth DUN, Device: Bluetooth-Modem) (2) USB Ethernet (Hardware Port: USB-Ethernet, Device: en3) (3) AirPort (Hardware Port: AirPort, Device: en0) (4) iPhone (Hardware Port: iPhone-USB, Device: en2) (5) Bluetooth PAN (Hardware Port: Bluetooth PAN, Device: en1) smartair:~ Sebastian$ networksetup -listnetworkserviceorder | grep Device (Hardware Port: Bluetooth DUN, Device: Bluetooth-Modem) (Hardware Port: USB-Ethernet, Device: en3) (Hardware Port: AirPort, Device: en0) (Hardware Port: iPhone-USB, Device: en2) (Hardware Port: Bluetooth PAN, Device: en1) smartair:~ Sebastian$ Hier muss ich dann mit einem folgenden ifconfig die Status ermitteln:
Code:
Wie man sieht ist mein iPhone weder per Bluetooth PAN (en1 - inactive) noch per USB (en2) verbunden, noch ist der externe USB-Ethernet-Adapter (en3) angeschlossen. Hier sollte also jedes mal 'not connected' stehen. Wenn connected (so wie das WLAN en0), so soll die aktuelle IPv4 Adresse, die Geschwindigkeit (sofern ermittelbar) und bei Wifi eben noch die SSID angezeigt werden.
smartair:~ Sebastian$ ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 10:93:e9:00:ca:1a inet6 fe80::1293:e9ff:fe00:ca1a%en0 prefixlen 64 scopeid 0x4 inet 192.168.178.34 netmask 0xffffff00 broadcast 192.168.178.255 media: autoselect status: active smartair:~ Sebastian$ ifconfig en1 en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 10:93:e9:00:ca:1b media: autoselect status: inactive smartair:~ Sebastian$ ifconfig en2 ifconfig: interface en2 does not exist smartair:~ Sebastian$ ifconfig en3 ifconfig: interface en3 does not exist smartair:~ Sebastian$ Dazu gibt es dann noch die Liste der aktuell verfügbaren WLAN's, von denen mir die SSID reichen würde, die Signalstärke (RSSI) wäre aber auch cool und ggf. die Security (wobei hier secured bzw. offen reichen würde):
Code:
Ich bin im Text parsen noch nicht so bewandert, deswegen weiss ich gar nicht, welche Tools hier die besten sind um die entsprechenden Stellen sauber zu extrahieren.
smartair:~ Sebastian$ airport -s
SSID BSSID RSSI CHANNEL HT CC SECURITY (auth/unicast/group) WLAN-3C0C43 88:25:2c:3c:0c:c9 -89 6,-1 Y DE WPA(PSK/TKIP,AES/TKIP) WPA2(PSK/TKIP,AES/TKIP) smartNet Office 06:24:fe:b6:a6:7a -51 1,+1 Y -- WPA(PSK/TKIP/TKIP) WPA2(PSK/AES/TKIP) smartNet Studio 06:24:fe:b2:8e:57 -68 1,+1 Y -- WPA(PSK/TKIP/TKIP) WPA2(PSK/AES/TKIP) smartNet Gast WLAN 06:24:fe:44:d0:7b -48 1,+1 Y -- WPA(PSK/TKIP/TKIP) WPA2(PSK/AES/TKIP) smartNet 00:24:fe:44:d0:7b -47 1,+1 Y -- WPA(PSK/TKIP/TKIP) WPA2(PSK/AES/TKIP) smartair:~ Sebastian$ |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Ich gucke es mir später genauer an. Muß erst noch ein paar Dinge erledigen.
|
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Ich bin bei der Tutorialsuche zum Schnuppern
![]() |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
oder das hier:
![]() Bernhard ADD: Ansonsten kann ich die MAN-Pages nur empfehlen ("man sed" in der Konsole auf Linux, Mac?) ADD2: "info sed" ist sogar noch ausführlicher. |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Also, der Mac mini in der Firma über VPN hat einige dieser Tools nicht, also werde ich stattdessen deine Ausgaben übernehmen und cat benutzen.
So, noch ein kleiner Kommentar: Zitat:
Einerlei. Ich schau jetzt mal rein. |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Zitat:
Code:
In beiden Fällen null.
smartair:~ Sebastian$ airport -I
agrCtlRSSI: -60 agrExtRSSI: 0 agrCtlNoise: -94 agrExtNoise: 0 state: running op mode: station lastTxRate: 130 maxRate: 144 lastAssocStatus: 0 802.11 auth: open link auth: wpa2-psk BSSID: 0:24:fe:44:d0:7b SSID: smartNet MCS: 15 channel: 1 smartair:~ Sebastian$ echo $? 0 smartair:~ Sebastian$ airport -I AirPort: Off smartair:~ Sebastian$ echo $? 0 |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Unter diversen *nixen kann man auch in /proc/ haufenweise Infos finden, aber das scheint's bei unserm Mac mini zumindest nicht zu geben.
Hier ein paar nützliche Grundlagen vor dem Lesen eines Bash-Skriptes (Wildcards in "pattern" ist jeweils erlaubt):
Code:
Alle TODO beachten!
#!/usr/bin/env bash
# TODO: Austauschen gegen networksetup -listnetworkserviceorder LISTSERVICES="cat networksetup-listnetworkserviceorder.txt" # TODO: Austauschen gegen airport -I AIRPORTI="cat airport-I.txt" AIRPORTI="cat airport-I-off.txt" # Ermitteln ob WLAN aktiv WLANACTIVE=1 ($AIRPORTI|grep -q 'AirPort: Off') && WLANACTIVE=0 # Entsprechend 'schöne' Ausgaben erzeugen if (( WLANACTIVE )); then echo "WLAN ist aktiv" $AIRPORTI|while read line; do case "$line" in agrCtlRSSI:*) # Ausgabe kannste hier anpassen echo "Empfangsqualität: ${line##*: } dB" ;; lastTxRate:*) # ... und hier echo "Aktuelle Geschwindigkeit: ${line##*: }" ;; *) ;; esac done else echo "WLAN ist nicht aktiv" fi # Geräte ermitteln # ... unnötige Teile herausschneiden. $LISTSERVICES|sed '/Device:/!d; s/^.*:\s\s*\(.*\),\s\s*Device:\s\s*\(.*\).$/\1:\2/i;'|while read device; do # Wichtige Teile extrahieren (Format pro Zeile ist <name>:<interface>) NAME=${device%%:*} IFACE=${device##*:} case "$IFACE" in en*) echo "$IFACE" # TODO: hier muß erweitert werden ;; *) ;; esac done Bei den Interfaces wird es schwer ohne die genauen Ausgaben oder Exitcodes der verschiedenen Fälle zu kennen. Aber ich denke das gibt dir zumindest einen Ansatz. Wir können es ja noch ausbauen wenn du mir noch ein paar Informationsbrocken zukommen läßt. In jedem Fall würde ich dir empfehlen die Rohdaten in eine Datei zu schreiben und diese nur zu aktualisieren wenn x Sekunden vergangen sind. Denn ansonsten haste soviele Aufrufe in einem Skript welches eigentlich nur im Hintergrund laufen soll, daß es einfach nicht mehr feierlich wäre. |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Cool, Danke! Ich denke ich werde mir das morgen früh im Zug mal im Detail ansehen und schauen dass ich da was gescheites mit hinbekomme :)
|
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Also bei mir geht das so leider nicht.
Ich habe genau Dein Script und dabei nur den Input durch die echten calls ersetzt:
Code:
Die Ausgabe ist dann folgende:
#!/usr/bin/env bash
# TODO: Austauschen gegen networksetup -listnetworkserviceorder # LISTSERVICES="cat networksetup-listnetworkserviceorder.txt" LISTSERVICES=`networksetup -listnetworkserviceorder` # TODO: Austauschen gegen airport -I AIRPORTI=`airport -I` #AIRPORTI="cat airport-I.txt" #AIRPORTI="cat airport-I-off.txt" # Ermitteln ob WLAN aktiv WLANACTIVE=1 ($AIRPORTI|grep -q 'AirPort: Off') && WLANACTIVE=0 # Entsprechend 'schöne' Ausgaben erzeugen if (( WLANACTIVE )); then echo "WLAN ist aktiv" $AIRPORTI|while read line; do case "$line" in agrCtlRSSI:*) # Ausgabe kannste hier anpassen echo "Empfangsqualität: ${line##*: } dB" ;; lastTxRate:*) # ... und hier echo "Aktuelle Geschwindigkeit: ${line##*: }" ;; *) ;; esac done else echo "WLAN ist nicht aktiv" fi # Geräte ermitteln # ... unnötige Teile herausschneiden. $LISTSERVICES|sed '/Device:/!d; s/^.*:\s\s*\(.*\),\s\s*Device:\s\s*\(.*\).$/\1:\2/i;'|while read device; do # Wichtige Teile extrahieren (Format pro Zeile ist <name>:<interface>) NAME=${device%%:*} IFACE=${device##*:} case "$IFACE" in en*) echo "$IFACE" # TODO: hier muß erweitert werden ;; *) ;; esac done
Code:
Er scheint irgendwie mit dem case-Statement und den Ausdrücken dort Probleme zu haben. Sollte mir wohl doch das Bash-Buch mal zulegen ;-)
smartair:Scripte Sebastian$ ./networkinfo.sh
./networkinfo.sh: line 12: agrCtlRSSI:: command not found WLAN ist aktiv ./networkinfo.sh: line 17: agrCtlRSSI:: command not found ./networkinfo.sh: line 37: An: command not found sed: 1: "/Device:/!d; s/^.*:\s\s ...": bad flag in substitute command: 'i' smartair:Scripte Sebastian$ |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Zitat:
Code:
wird die Variable im besten Fall mit der Ausgabe von "airport -I" füllen, im schlimmsten Fall nicht funktionieren, weil diese Ausgabe mehrere Zeilen hat.
AIRPORTI=`airport -I`
Versuch:
Code:
AIRPORTI="airport -I"
|
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Ah, I see. Jetzt kapier ich das :)
Jetzt macht auch die Ausgabe Sinn :) Ich muss mir das nach dem Mittagsmampf nochmal kurz angucken. Update: Ah, fein. Jetzt hab ichs geschnakelt. Die WLAN-Ausgabe tut. :) Das Problem weiter unten besteht aber weiter:
Code:
Die gleiche Meldung kommt auch, wenn ich das direkt auf der Shell so reinpipe:
sed: 1: "/Device:/!d; s/^.*:\s\s ...": bad flag in substitute command: 'i'
Code:
networksetup -listnetworkserviceorder|sed '/Device:/!d; s/^.*:\s\s*\(.*\),\s\s*Device:\s\s*\(.*\).$/\1:\2/i;'
|
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Hrm.. das /i (ignore case flag) wird von sed auf OS X offenbar nicht unterstützt.
Siehe auch hier: ![]() Gibts eine andere Idee / wird das wirklich benötigt oder muss ich wie in dem Beispiel den Aufruf auf perl umstellen? |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Haste GNU sed, manchmal als gsed verfügbar?
Wenn nicht, sollte folgendes auch funzen:
Code:
Das war aber nur um den Fall zu behandeln falls mal "device" ohne Großbuchstaben auftaucht. Stattdessen kannste auch versuchen mal die 'i' komplett zu entfernen. Wenn die Ausgabe exakt mit "Device" und nie als "device" kommt, funzt es trotzdem.
sed '/[dD]evice:/!d; s/^.*:\s\s*\(.*\),\s\s*[dD]evice:\s\s*\(.*\).$/\1:\2/i;'
|
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Leider kein gsed da. Aber ohne das i hinter dem letzten / gehts so halber.
Die Regex scheint noch nicht so ganz zu passen.
Code:
Auf der Kommandozeile erhalte ich folgende Ausage von networksetup -list.. | sed 'blablub':
#!/usr/bin/env bash
# ... # Geräte ermitteln # ... unnötige Teile herausschneiden. $LISTSERVICES|sed '/Device:/!d; s/^.*:\s\s*\(.*\),\s\s*Device:\s\s*\(.*\).$/\1:\2/;'|while read device; do # Wichtige Teile extrahieren (Format pro Zeile ist <name>:<interface>) NAME=${device%%:*} IFACE=${device##*:} # mal debug-Ausgabe ;-): echo "$NAME" echo "$IFACE" case "$IFACE" in en*) echo "$IFACE" # TODO: hier muß erweitert werden ;; *) ;; esac done
Code:
Die Ausgabe des Teilscriptes ist dann folgende:
(Hardware Port: Bluetooth DUN, Device: Bluetooth-Modem)
(Hardware Port: USB-Ethernet, Device: en3) (Hardware Port: AirPort, Device: en0) (Hardware Port: iPhone-USB, Device: en2) (Hardware Port: Bluetooth PAN, Device: en1)
Code:
Also wird durch die Regex nicht der Name gematched sondern der Anfang der Zeile und beim iface haben wir noch das zusätzliche Leerzeichen vor dem Device-Namen und hinten die Klammer.
(Hardware Port
Bluetooth-Modem) (Hardware Port en3) (Hardware Port en0) (Hardware Port en2) (Hardware Port en1) Bei der Gelegenheit möchte ich nochmal anmerken dass ich Reguläre Echsen zwar für irgendwie geil halte, aber in so einem Fall das herumwickeln der eigenen Hirnwindungen um so einen Ausdruck mehr als schwierig ist :stupid: |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Seltsam, ich wüßte nicht wo da was falsch ist. Kann höchstens sein, daß das sed im Mac irgendwie ne andere Vorstellung von Regexen hat als GNU sed. Das ist leider hin und wieder der Fall:
Code:
Ich werd nachher nochmal auf unserem Mac mini gucken.
# Alle Zeilen mit 'Device:' nicht löschen
/Device:/!d; # Am Anfang der Zeile alles bis zum Doppelpunkt und dann jegliche Leerzeichen finden, # alles ab da bis zum Komma in Gruppe 1 einfangen. # Nach dem Komma jegliche Leerzeichen sowie 'Device:' und folgende Leerzeichen finden, # ab da alles bis auf das letzte Zeichen in Gruppe 2 einfangen s/^.*:\s\s*\(.*\),\s\s*Device:\s\s*\(.*\).$/ # Gruppen so ausgeben: $1:$2 \1:\2/; |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Habs. Im Moment siehts so aus:
Code:
Die ifconfig $IFACE ausgabe tut auch schon - jetzt muss ich hier nur noch die Ausgabe auseinanderpfriemeln und dann je nach Status (existiert nicht, active, inactive) so wie beim WLAN jetzt die Ausgabe zusammenbauen.
#!/usr/bin/env bash
LISTSERVICES="networksetup -listnetworkserviceorder" AIRPORTI="airport -I" # Ermitteln ob WLAN aktiv WLANACTIVE=1 ($AIRPORTI|grep -q 'AirPort: Off') && WLANACTIVE=0 # Entsprechend 'schöne' Ausgaben erzeugen if (( WLANACTIVE )); then $AIRPORTI|{ while read line; do case "$line" in agrCtlRSSI:*) QUALITY=${line##*: } ;; lastTxRate:*) SPEED=${line##*: } ;; SSID:*) SSID=${line##*: } ;; channel:*) CHANNEL=${line##*: } ;; *) ;; esac done 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 # Geräte ermitteln # ... unnötige Teile herausschneiden. $LISTSERVICES|sed '/Device:/!d; s/^.*:\s\s*\(.*\),\s\s*Device:\s\s*\(.*\).$/\1:\2/;'|while read device; do # Wichtige Teile extrahieren (Format pro Zeile ist <name>:<interface>) 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 |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
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:
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 :) ).
#!/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:") |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Zitat:
Code:
Danach kannste dann bspw. so an die sortierte Liste kommen:
INTERFACES="en0 en4 en3"
Code:
Nochmals, würde das alte sed benutzt, wäre dies kein Problem, weil du dann eben die erhaltene Liste einmal durch sort jagen könntest und erst dann ausgeben müßtest (aber eben mit für $1 und $2 getauschten Positionen).
(for i in $INTERFACES; do echo $i; done)|sort|while ...
|
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Das alte sed hat aber wie gesagt zumindest bei mir nicht die gewünschte Ausgabe :)
|
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Aaah, gerade auf unserem Mac mini geschaut. Handelt sich also um BSD sed.
Versuch mal:
Code:
Bei mir ergibt das:
sed -E -e '/Device:/!d; s/^\(Hardware Port: *(.*), *Device: *(.*)\)$/\2:\1/'
Code:
... welches man durch sort und dann durch ein while read jagen kann ...
Bluetooth-Modem:Bluetooth DUN
en3:USB-Ethernet en0:AirPort en2:iPhone-USB en1:Bluetooth PAN |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Dann schau ich mal dass ich das nachher in der Mittagspause zusammenpfriemel. Diese Regex da versteh ich schon längen besser als die davor *g* :)
Hervorragend, so tut's jetzt :)
Code:
Die Ausgabe bisher:
#!/usr/bin/env bash
echo "Network information:" echo "====================" LISTSERVICES="networksetup -listnetworkserviceorder" AIRPORTI="airport -I" # Ermitteln ob WLAN aktiv 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 # Geräte ermitteln # ... unnötige Teile herausschneiden. while read device; do #empty line / placeholder echo IFACE=${device%%:*} NAME=${device##*:} case "$IFACE" in en*) echo "Interface: $NAME" echo "========================" ifconfig $IFACE # TODO: hier muß erweitert werden ;; Bluetooth-Modem*) #echo $NAME ;; *) ;; esac done < <($LISTSERVICES|sed -E -e '/Device:/!d; s/^\(Hardware Port: *(.*), *Device: *(.*)\)$/\2:\1/'|sort)
Code:
smartair:Scripte Sebastian$ ./networkinfo.sh
Network information: ==================== WIFI: enabled Network: SH_SECURED_1OG Speed: 54 Mbit/s Quality: -61 dB Interface: AirPort ======================== en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 10:93:e9:00:ca:1a inet6 fe80::1293:e9ff:fe00:ca1a%en0 prefixlen 64 scopeid 0x4 inet 192.168.2.120 netmask 0xffffff00 broadcast 192.168.2.255 media: autoselect status: active Interface: Bluetooth PAN ======================== en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 10:93:e9:00:ca:1b media: autoselect status: inactive Interface: iPhone-USB ======================== ifconfig: interface en2 does not exist Interface: USB-Ethernet ======================== ifconfig: interface en3 does not exist smartair:Scripte Sebastian$ |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Cool. Wird dann noch was gebraucht?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz