Kurzfassung
Schon von Dudek beantwortet; Dieses Verzeichnis wird für Skripte verwendet, die Ihrem System mitteilen, wie mit Dingen umgegangen werden soll, die an das System angeschlossen oder von diesem getrennt werden.
Unter "Langversion" finden Sie Versuche zu erklären, wie ich das betreffende Skript verstanden habe. Grundsätzlich wird nach dem Ausführen einiger Überprüfungen und dem Laden einiger externer Funktionen geprüft, ob entweder die Befehlsfolge start
oder stop
oder ein Fehler ausgeführt und beendet werden soll.
Oh ja, es könnte Sie sehr gut vom Fernzugriff abhalten, wenn Sie die Netzwerkkonfigurationen auf eine Weise berühren, die das RPi nicht besonders mag. Ich habe meine Netzwerkkonfigurationen in der Vergangenheit auf meinem RPi so grob berührt, dass es einfacher war, mit einer Neuinstallation zu beginnen. Seien Sie vorsichtig und ziehen Sie in Betracht, das RPi-Temperaroly an einen Ort zu verschieben, an dem Sie sich leicht bei local anmelden können.
Lange Version
Wenn ich diese Datei auf meinem RPi durchschaue, scheint sie gut kommentiert zu sein und wird nicht für viele externe Funktionsaufrufe verwendet. Aber Sie haben nach Laienbegriffen gefragt, also werde ich mein Bestes geben, um zu erklären, wie ich diese Art von Skripten verstehe, da es so aussieht, als wären Sie ein RPi-Benutzer wie ich (Headless Remote Server Setup) Möglicherweise möchten Sie überprüfen, was ich bereits auf dem RPi StackExchange für die automatische Wiederherstellung zu versteckten WiFi-Netzwerken beschrieben habe, da es möglicherweise andere Tricks enthält, die für Ihre Serveranforderungen nützlich sind.
Um Ihnen bei der Beantwortung Ihrer Fragen zu helfen, finden Sie hier einige Erläuterungen zur Shell-Skriptsyntax.
In Shell- ~.sh
Skripten ist es üblich , solche Funktionen zu finden.
function_name () {
echo "doing stuff for function_name"
}
und dann über function_name
letztere im Skript aufgerufen , manchmal innerhalb anderer Funktionen. Funktionen, Skriptdateien und wenn Anweisungen nur Listen von auszuführenden Befehlen sind. Im Fall von Funktionen der Stoff zwischen {
und }
wird läuft und im Fall von if
statments das Zeug zwischen then
und fi
ausgeführt werden und in instences wo else
oder elif
innerhalb verwendet werden , if
bedingt statments.
Für die Datei sind disecting wir es sind Funktionen genannt do_start
, do_stop
und einige in anderen Dateien definiert Funktionen ... „Welche Dateien sind diese anderen Funktionen definded?“ oder "Wie finde ich, ob Skript a Funktionen aus Datei b lädt?" sind zwei Fragen, die wir zuerst beantworten müssen.
Um die Linie 48
in /etc/wpa_supplicant/ifdown.sh
gibt es eine Kommentarzeile (dh Linie beguining mit #
simble; diese von Skript intrupriter ignoriert werden ... meistens) mit source functions
coventently labbling die nächsten paar Zeilen bestimmt PERPOS ~
# source functions
if [ -f /etc/wpa_supplicant/functions.sh ]; then
. /etc/wpa_supplicant/functions.sh
else
exit
fi
Beachten Sie, dass dies ein gutes Beispiel für das Skriptverhalten ist. Überprüfen Sie, ob eine Datei vorhanden ist, bevor Sie davon ausgehen, dass dies der Fall ist.
Das erste Bit if [ -f
sucht nach einer Datei unter dem definierten Dateipfad. Und wenn vorhanden, then
laden Sie den Inhalt der Datei über source
(kurze source
Befehlshilfe, .
aber ich vermeide es, sie in meinen Skripten zu verwenden, da sie durch cp
andere Befehle, die ich habe , falsch interpretiert werden kann ) die durch den Pfad definierte Datei. Als nächstes wird else
überprüft, ob das Skript exit 0
mit dem Status beendet wird , wenn diese Datei nicht gefunden wurde 0
. Dann if
endet die Einstellung mit fi
dem Schließen von Aktionen, die ausgeführt werden müssen, wenn die erste Anweisung nicht bestanden wurde. Oder mit anderen Worten, wenn /etc/wpa_supplicant/functions.sh dies nicht tutexsist dann exit, andernfalls laden Sie diese Funktionen und setzen Sie die Verarbeitung fort. Diese Art der Doppelprüfung, ob ein Wert oder eine Datei vorhanden ist, wird im gesamten fraglichen Skript sowie in anderen Skripten wiederholt. Dabei wird -f
nach Dateien -n
gesucht, die Zeichenfolgenlänge -x
überprüft und nicht nur überprüft, ob eine Datei vorhanden ist, sondern auch Wenn der Benutzer, der das Skript ausführt, über ausführbare Berechtigungen für die definierte Datei verfügt, -s
prüft, ob eine Datei leer ist, -n
prüft, ob die Zeichenfolge nicht leer oder null
wert ist, und =
vergleicht Zeichenfolgen (oder Werte) in if
Anweisungen. Etwas anderes sehen Sie in Shell- und Bash-Skripten unter Linux mit if
Statments, elif
aber das ist für einen anderen Tag. In diesem Skript werden zusätzlich zu anderen Tricks verwendetif
Anweisungen wie ||
"oder", &&
"und" und !
"nicht" Operatoren wie Online 55
~
# quit if executables are not installed
if [ ! -x "$WPA_SUP_BIN" ] || [ ! -x "$WPA_CLI_BIN" ]; then
exit 0
fi
~ Die einfach Staaten setzen, wenn die Datei definiert $WPA_SUP_BIN
ist nicht ausführbar oder die Datei definiert $WPA_CLI_BIN
ist nicht ausführbar beendet das Programm mit Status 0
ohne Verarbeitung weiter. Diese können auf den ersten Blick komplex aussehen, aber das Vorlesen in einer menschlicheren Syntax kann beim ersten Lernen #
hilfreich sein , für die einfachen, und das Hinzufügen von Kommentaren mit für komplexe ist sehr hilfreich, wenn Sie lernen oder auf das letztere Thema zurückkommen.
Die Datei, die intern bezogen wird, sollte auch überprüft werden, wenn Sie sich nicht sicher sind, wie etwas in der ifupdown.sh
Datei aufgerufen wird. Ich würde vorschlagen , nano /etc/wpa_supplicant/functions.sh
und dann mit ^w
oder Ctrl+w
für die Funktion des Namens suchen um , dass Sie möchten mehr darüber wissen. Denn zwischen jeder Aufgabe, die dieses Skript nennt, und dem Inhalt der functions.sh
meisten Puzzel Peces .
Jetzt wird es ein bisschen anders, 135
wenn eine case
Anweisung gestartet wird. Diese Art von Anweisungen hat eine bestimmte Struktur, die wir zum Entschlüsseln von Operationen verwenden können.
case $some_variable in
start)
echo "The word [start] was detected in \$some_variable"
;;
stop)
echo "The word [stop] was detected in \$some_variable"
;;
*)
echo "The word [$some_variable] was detected in \$some_variable but not understood"
;;
esac
Im obigen Beispiel case
durchsuchen wir wie bei anderen Anweisungen im Wesentlichen den Inhalt $some_variable
nach den defienierten Schlüsselwörtern, dh start
oder, stop
und wenn das Schlüsselwort gefunden wird, geben Sie Befehle zwischen Trailling )
und Preseading aus ;;
, die dazu dienen, unterschiedliche Aktionen für verschiedene Schlüssel zu trennen Wörter gefunden. Beachten Sie , dass Sie diese case
Anweisungen in einigen Skripten möglicherweise in for
Schleifen finden, aber auch für einen anderen Tag.
Im Fall der case
Aussagen im ifupdown.sh
Skript sind passend wir zuerst die start
oder stop
Status innerhalb $MODE
variabel und mit $PHASE
Wert , wenn Übereinstimmen pre-up
oder post-up
Folge von Befehl sollte aufgerufen werden , oder wenn die pre-down
oder post-down
Folge von Befehlen sollten stattdessen aufgerufen werden. Wenn weder start
noch stop
wo erkannt, wird ein Fehler protokolliert, gedruckt und das Skript mit dem Status 1
Fehler beendet.