Moin! Am Mittwoch, 6. April 2005 09:34 schrieb Uli Wachowitz:
Sorry, du hattest was von Script geschrieben, daher nahm ich an... egal.
Ich habe kaum Ahnung, kann Variablen setzen, echo, logger benutzen, if fi und then kenne ich, aber ansonsten sieht es mit bash mau aus. :( Mein Skript bis jetzt war einfach Taste abfangen und dann mit if then ifup bzw. ifdown die WLAN-Karte gestartet/-stoppt, die module geladen/entfernt, mehr war da nicht.
Nun mal mit Kommentaren: ------ # # 1.) Die MAC Adresse deiner WLAN Karte # WLANMAC="xx:xx:xx:xx:xx:xx"
Das kannte ich noch ;)
# 4.) einfache 'for in do' Schleife. Abbruchbedingung ist der Inhalt # der Var '$WLANIFACE'. Diese wurde ja oben leer definiert. Solange # sie leer bleibt, wird die Liste der Interfaces in der Variablen # '$IFACES' abgearbeitet. #
Gut, das mit der Abbruchbedingung hatte ich zwar erahnt, aber nicht verstanden.
# # 5.) Test ob Var '$WLANIFACE' leer ist. Wenn ja '&&' weiter, nächster # Befehl in der Schleife. Ansonsten Abbruch der Schleife # [ "$WLANIFACE" == "" ] && \ # der '\' dient nur dem Zeilenunbruch
Bedeutung von && und || ist mir jetzt auch klar, danke. Bisher kannte ich es nur in Bedingungen und nicht als Kette von Kommandos. Das mit dem Backslash habe ich schonmal mitbekommen, zumindest war da noch was im Hinterkopf.
# # Die Ausgabe von 'ifconfig' wird weitergeleitet an den nächsten # Befehl. Fehlermeldungen, weil etwa das Interface welches gerade # geprüft wird, nicht existiert, werden nicht angezeigt. # Beachte: durch die Schleifendefinition 'for i in $IFACES' # besitzt innerhalb der Schleife die Var '$i' den jeweils aktuellen # Wert von '$IFACES', also bei jedem Durchlauf EINEN Wert aus # '$IFACES'. Dadurch wird die dort definierte Liste der Reihe nach # abgearbeitet. # ifconfig $i 2>/dev/null | \
Das habe ich mit set -xv gesehen, das mit dem 2> habe ich auch erklärt bekommen.
# # die Ausgabe von 'ifconfig' wird auf das Vorhandensein des Inhaltes # der Var '$WLANMAC' geprüft. Ist diese Var in der Ausgabe enthalten # wird die VAR '$$WLANIFACE' auf den aktuellen Wert von '$i' gesetzt # und enthält so den Namen des WLAN Interfaces. Diese Var '$WLANIFACE' # kann man nun bequem per Script weiterverarbeiten um so was auch immer # zu machen. # Da '$WLANIFACE' nun nicht mehr leer ist, bricht die Schleife beim # nächsten Durchlauf bei '5.)' ab grep -q $WLANMAC && WLANIFACE="$i"
# # Schleifenende # done ------
Und hier nochmal am Stück mit Ausgabe per 'echo', diesmal sogar getestet :-) In meiner Ersten Version fehlte ein '"' in der Testschleife '[]'.
Das fehlende " hinter $WLANIFACE hatte ich schon gefunden und korrigiert.
--------------- #!/bin/bash WLANMAC="xx:xx:xx:xx:xx:xx" WLANIFACE=""
IFACES=" eth0 eth1 "
for i in $IFACES; do [ "$WLANIFACE" == "" ] && \ ifconfig $i 2>/dev/null | \ grep -q $WLANMAC && WLANIFACE="$i" done
echo $WLANIFACE ----------------
Dann setze ich das jetzt nochmal ein, vielen Dank für die Erklärungen, damit werde ich dann auch für das anschalten der Karte iwconfig auslesen können, auch wenn da leider keine MAC Adresse angegeben wird, aber das geht schon. Falls es interessiert, das Skript ist für ein Samsung P35 und den WLAN-Knopf, wenn ich es zufriedenstellend am Laufen habe melde ich mich wieder. Danke nochmals! Sven