Bei der Ausgabe von wird iwconfig
der Name des Zugangspunkts in doppelte Anführungszeichen gesetzt, was zu einer Verrückung führt. Der Autor des Skripts behandelt dieses "Artefakt" in seinem Skript, anstatt es sofort loszuwerden. Ich schlage vor, die Anführungszeichen zu entfernen, bevor Sie etwas anderes tun. Zwei mögliche Ansätze wären:
$ eval moo=`iwconfig wlan0 | awk -F":" '/ESSID/' ` $ moo=`iwconfig wlan0 | awk -F":" '/ESSID/' |tr -d \"`
Der erste führt die Anweisung zur Variablenzuweisung "wörtlich" aus, während der andere doppelte Anführungszeichen aus der Ausgabezeichenfolge entfernt.
Das zweite Problem des Skripts besteht in der Annahme, dass $ LIST ohne Anführungszeichen verwendet werden darf (da der String doppelte Anführungszeichen enthalten hätte). Ich denke, das ist ein Fehler, da die Zeichenfolge immer noch als zwei Token ausgewertet wird:
$ moo='"aaa bbb"' $ if [ $moo = "\"aaa bbb\""];then ok;fi ash: bbb": unknown operand $ if [ "$moo" = "\"aaa bbb\"" ];then echo ok;fi ok
Um dies zu beheben, zitieren Sie die Parameter in den eckigen Klammern und entfernen Sie die mit Escapezeichen versehenen Anführungszeichen im zweiten Argument (da wir sie aus der iwconfig-Ausgabe entfernt haben):
if [ "$LIST" = "$1" ]; then ...
Um einen String mit unregelmäßigen Zeichen (Leerzeichen, Klammern) als ein Argument an ein Skript zu übergeben, zitieren Sie es einfach:
$ autoconnect.sh "a name (with a comment)"
Der letzte Teil zur Übereinstimmung des Namens mit grep wurde von glenn jackman bereits ausreichend beantwortet.
Hinweis: Das obige wurde mit BusyBox ash (1.20.2) getestet.