
Dieser Beitrag zeigt, wie lokale Variablenfunktionen in Bash verwendet und erstellt werden. Durch das Erstellen von Bash-Funktionen können Sie Ihren Code struktureller gestalten, und lokale Variablen helfen bei der Sicherheit und vermeiden Codierungsfehler. Eintauchen!
Welche sind Bash-Funktionen?
Genauso wie andere Programmiersprachen, Mit Bash können Sie Funktionen aus Ihrem Code oder Skript erstellen. Eine Rolle kann festgelegt werden, um eine bestimmte Aufgabe auszuführen, oder eine Reihe von Aufgaben, und Sie können einfach und schnell von Ihrem Hauptcode aus aufrufen, indem Sie einfach den Namen verwenden, der der Funktion gegeben wurde.
Sie können auch Funktionsaufrufe verschachteln (Aufrufen einer Funktion aus einer anderen Funktion heraus), Verwenden Sie lokale Variablen innerhalb der Funktion und übergeben Sie sogar Variablen mit Funktionen hin und her, oder durch die Verwendung von globalen Variablen. Lassen Sie uns erkunden.
Einfache Trefferfunktion
Mit unserem Texteditor definieren wir eine test.sh, auf dem nächsten weg:
#!/bin/bash
welcome(){
Echo "Willkommen"
}
Willkommen
Anschließend, Wir machen diese Datei ausführbar, indem wir die Ausführung hinzufügen (x
) -Eigenschaft und führen Sie das Skript aus:
chmod +x test.sh
./test.sh
Wir können sehen, wie das Skript zuerst eine welcome()
Funktion mit Bash-Redewendungen function_name()
, Ja {
…}
Funktions-Wrapper. Abschließend, Wir nennen die Funktion willkommen, indem wir einfach ihren Namen verwenden, welcome
.
Wenn das Skript ausgeführt wird, Was im Hintergrund passiert, ist, dass die Definition der Funktion notiert wird, aber weggelassen (Mit anderen Worten, läuft nicht), bis der Funktionsaufruf etwas tiefer geht. welcome
wird geschlagen, und an welcher Stelle der Bash-Interpreter die welcome
und kehrt direkt nach dem Funktionsaufruf in die Zeile zurück, was für diesen Fall das Ende unseres Skripts ist.
Übergeben von Variablen an Bash-Funktionen
Wir definieren eine test2.sh mit unserem bevorzugten Texteditor (wir;), auf dem nächsten weg:
#!/bin/bash if [ -Mit "${1}" ]; then echo "Eine Option erforderlich!" Ausfahrt 1 fi func1(){ Echo "${1}" } func2(){ Echo "${2} ${1}" } func1 "${1}" func2 "ein" "B"
Auch hier machen wir unser Skript ausführbar mit chmod +x test2.sh
und führen Sie dasselbe aus.
Das resultierende Ergebnis mag auf den ersten Blick interessant oder sogar verwirrend erscheinen.. Trotz dieses, es ist logisch und einfach zu befolgen. Die erste an das Skript übergebene Option ist, global, erhältlich von Code wie ${1}
, außer interne Funktionen, wo ${1}
wird der erste Parameter, der an die Funktion übergeben wird, ${2}
der Zweite, usw.
Mit anderen Worten, der Globus ${1}
Variable (die erste Option, die von der Befehlszeile an das Skript übergeben wird) nicht innerhalb der Funktionen aktiviert, wo die bedeutung von ${1}
Die Variable ändert sich zur ersten an die Funktion übergebenen Option. Denken Sie über die Hierarchie nach oder überlegen Sie, wie eine Funktion ein kleines Skript alleine darstellen könnte und das wird bald Sinn machen.
Als Randnotiz, es könnte auch verwendet werden $1
Anstatt von ${1}
, aber ich empfehle angehenden Bash-Programmierern dringend, Variablennamen immer mit zu umgeben {
Ja }
.
Der Grund ist, dass manchmal, bei Verwendung von Variablen in einem String, als Beispiel, der Bash-Performer kann nicht sehen wo eine Variable endet und ein Teil des angehängten Textes als Teil des Variablennamens genommen werden kann, wo dies nicht der Fall ist, was eine unerwartete Ausgabe erzeugt. Es ist auch sauberer und klarer, was die Absicht ist, insbesondere wenn es um spezielle alternative Arrays und Flags geht.
Deshalb, Wir haben unser Programm mit dem ${1}
Variable auf gesetzt "first"
. Wenn Sie sich die Berufung ansehen func1
, Sie werden sehen, dass wir diese Variable an die Funktion übergeben, also die ${1}
innerhalb der Funktion wird das, was im war ${1}
des Programms, Mit anderen Worten "first"
, und deshalb ist die erste Ausgabezeile eigentlich first
.
Dann rufen wir an func2
und wir haben zwei Threads bestanden "a"
Ja "b"
zur Funktion. Diese werden später die ${1}
Ja ${2}
automatisch innerhalb der func2
Funktion. Innenfunktion, Wir drucken sie verkehrt herum, und unsere Ausgabe passt sehr gut zu b a
als zweite Startlinie.
Abschließend, Wir führen auch eine Überprüfung am Anfang unseres Skripts durch, die sicherstellt, dass eine Option wirklich an den . weitergegeben wird test2.sh
Skriptprüfung, wenn "${1}"
ist leer oder verwendet die -z
Test innerhalb if
Befehl. Wir beenden das Skript mit einem Exit-Code ungleich null (exit 1
) um aufrufenden Programmen anzuzeigen, dass etwas schief gelaufen ist.
Lokale Variablen und Rückgabewerte
Für unser letztes Beispiel, Wir definieren ein Skript test3.sh folgendermaßen:
#!/bin/bash
func3(){
lokale REVERSE="$(Echo "${1}" | Rev)"
Echo "${RÜCKWÄRTS}"
}
EINGABE="ABC"
UMGEKEHRT="$(func3 "${EINGABE}")"
Echo "${RÜCKWÄRTS}"
Wieder machen wir es ausführbar und führen das Skript aus. Die Ausgabe ist cba
wie Sie es erwarten können, indem Sie den Code scannen und die Namen der Variablen aufschreiben, usw.
Trotz dieses, Der Code ist komplex und etwas gewöhnungsbedürftig. Lassen Sie uns erkunden.
Entscheiden , Wir definieren eine Funktion func3
In dem wir eine lokale Variable namens REVERSE
. Wir weisen ihm einen Wert zu, indem wir eine Unterschicht aufrufen ($()
), und aus dieser Unterschicht geben wir das zurück, was an die Funktion übergeben wurde (${1}
) und kanalisieren Sie diesen Ausgang zu rev
Befehl.
das rev
Der Befehl druckt die von der Pipe empfangene Eingabe (auf eine andere Art) kopfüber. Interessant ist hier auch, dass die ${1}
Die Variable bleibt in der Unterschale! Es wird ganzheitlich übergeben.
Nächste, noch von innen func3
Funktion, wir drucken die Ausgabe. Trotz dieses, diese Ausgabe wird nicht an den Bildschirm gesendet, stattdessen wird es von unserem Funktionsaufruf erfasst und, da, gespeichert innerhalb der „global“’ REVERSE
Variable.
Wir etablieren unseren Einstieg in "abc"
, Ruf an func3
wieder innerhalb einer Unterebene arbeiten, vorbei an der INPUT
Variable, und ordnen Sie die Ausgabe zu REVERSE
Variable. Beachten Sie, dass es absolut keine Verbindung zwischen den „global“’ REVERSE
variabel und lokal REVERSE
Variable dentro del script.
Während jede globale Variable, einschließlich jeglicher UMKEHREN es wird an die Funktion übergeben, sobald eine lokale Variable mit demselben Namen definiert ist, die lokale Variable wird verwendet. Wir können auch versuchen, dieses andere kleine Skript test4.sh . zu sehen:
#!/bin/bash
func3(){
lokale REVERSE="$(Echo "${1}" | Rev)"
Echo "${RÜCKWÄRTS}"
}
EINGABE="ABC"
UMGEKEHRT="Prüfung"
func3 "${EINGABE}"
Echo "${RÜCKWÄRTS}"
Wenn du rennst, die Ausgabe ist cba
Ja test
. das cba
wird diesmal vom selben erzeugt echo "${REVERSE}"
innerhalb func3
Funktion, aber dieses Mal wird es direkt ausgegeben, anstatt wie im folgenden Code abgefangen zu werden func3 "${INPUT}"
Die Funktion wird nicht innerhalb einer Unterschicht aufgerufen.
Dieses Skript hebt zwei Lernpunkte hervor, die wir zuvor behandelt haben: zuerst, Was, selbst als wir die gegründet haben REVERSE
variabel a "test"
innerhalb des Skripts, bevor Sie die aufrufen func3
Funktion – dass er lokal Variable REVERSE
Übernimm die Kontrolle und benutze es stattdessen „global“’ einer.
An zweiter Stelle, als unser „global“’ REVERSE
die Variable behält ihren Wert, obwohl a lokal Variable mit dem gleichen Namen, die innerhalb der aufgerufenen Funktion verwendet wird func3
.
Ende
Wie du siehst, die Bash-Funktionen, Variablen übergeben, sowie die Verwendung lokaler und semi-globaler Variablen machen die Bash-Skriptsprache vielseitig, einfach zu codieren und gibt Ihnen die Möglichkeit, gut strukturierten Code zu erstellen.
Weiterhin ist hier bemerkenswert, dass, bei gleichzeitiger Verbesserung der Lesbarkeit und Benutzerfreundlichkeit des Codes, Die Verwendung lokaler Variablen bietet zusätzliche Sicherheit, da die Variablen außerhalb des Kontexts einer Funktion nicht zugänglich sind, usw. Genießen Sie lokale Variablen und Funktionen beim Programmieren in Bash!!
Wenn Sie mehr über Bash erfahren möchten, Siehe So analysieren Sie Dateinamen in Bash richtig und Verwenden von xargs in Kombination mit bash -c, um komplexe Befehle zu erstellen.