Bash Tutorial #6 - Funktionen
Inhaltsverzeichnis:
Eine Bash-Funktion besteht im Wesentlichen aus einer Reihe von Befehlen, die mehrmals aufgerufen werden können. Mit einer Funktion können Sie die Lesbarkeit Ihrer Bash-Skripte verbessern und vermeiden, dass Sie denselben Code immer wieder schreiben.
Im Vergleich zu den meisten Programmiersprachen sind die Bash-Funktionen etwas eingeschränkt. In diesem Tutorial werden wir die Grundlagen der Bash-Funktionen behandeln und Ihnen zeigen, wie Sie sie in Ihren Shell-Skripten verwenden können.
Bash-Funktionserklärung
Die Syntax zum Deklarieren einer Bash-Funktion ist sehr einfach. Sie können in zwei verschiedenen Formaten deklariert werden:
-
Das erste Format beginnt mit dem Funktionsnamen, gefolgt von Klammern. Dies ist das bevorzugte und am häufigsten verwendete Format.
function_name () { commands }Einzeilige Version:
function_name () { commands; }Das zweite Format beginnt mit dem für die
functionreservierten Wort, gefolgt vom Funktionsnamen.function function_name { commands }Einzeilige Version:
function function_name { commands; }
Einige Punkte zu beachten:
- Die Befehlsliste zwischen geschweiften Klammern
{}ist der Hauptteil der Funktion. Die geschweiften Klammern, die den Funktionskörper umgeben, müssen durch Leerzeichen oder Zeilenumbrüche vom Körper getrennt sein. Das Definieren einer Funktion führt sie nicht aus. Um eine Bash-Funktion aufzurufen, verwenden Sie einfach den Funktionsnamen. Befehle zwischen den geschweiften Klammern werden immer dann ausgeführt, wenn die Funktion im Shell-Skript aufgerufen wird. Die Funktionsdefinition muss vor jedem Aufruf der Funktion platziert werden. Wenn einzeilige „komprimierte“ Funktionen verwendet werden, ein Semikolon;muss dem letzten Befehl in der Funktion folgen. Sie sollten immer versuchen, Ihre Funktionsnamen aussagekräftig zu halten.
Um dies besser zu verstehen, schauen Sie sich das folgende Beispiel an:
~ / hello_world.sh
#!/bin/bash hello_world () { echo 'hello, world' } hello_world
Lassen Sie uns den Code Zeile für Zeile analysieren:
- In Zeile
3wir die Funktion, indem wir ihr einen Namen geben und die geschweifte Klammer{öffnen, die den Anfang des Funktionskörpers markiert. Zeile4ist der Funktionskörper. Der Funktionskörper kann mehrere Befehle und Variablendeklarationen enthalten. Zeile5, die schließende geschweifte Klammer}, definiert das Ende der Funktionhello_worldZeile7wir die Funktion aus. Sie können die Funktion beliebig oft ausführen.
Wenn Sie das Skript ausführen, wird
hello, world
gedruckt.
Variablenbereich
Globale Variablen sind Variablen, auf die unabhängig vom Gültigkeitsbereich von überall im Skript zugegriffen werden kann. In Bash sind standardmäßig alle Variablen als global definiert, auch wenn sie in der Funktion deklariert sind.
Lokale Variablen können innerhalb des Funktionskörpers mit dem Schlüsselwort
local
deklariert und nur innerhalb dieser Funktion verwendet werden. Sie können lokale Variablen mit demselben Namen in verschiedenen Funktionen haben.
Um besser zu veranschaulichen, wie der Gültigkeitsbereich von Variablen in Bash funktioniert, betrachten wir ein Beispiel:
~ / variables_scope.sh
#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"
Das Skript definiert zunächst zwei globale Variablen
var1
und
var2
. Dann eine Funktion, die eine lokale Variable
var1
und die globale Variable
var2
.
Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D
Aus der obigen Ausgabe können wir schließen, dass:
- Wenn Sie eine lokale Variable innerhalb des Funktionskörpers mit demselben Namen wie eine vorhandene globale Variable festlegen, hat diese Vorrang vor der globalen Variable. Globale Variablen können innerhalb der Funktion geändert werden.
Rückgabewerte
Im Gegensatz zu Funktionen in „echten“ Programmiersprachen können Sie mit Bash-Funktionen beim Aufruf keinen Wert zurückgeben. Wenn eine Bash-Funktion abgeschlossen ist, ist ihr Rückgabewert der Status der zuletzt in der Funktion ausgeführten Anweisung,
0
für Erfolg und eine Dezimalzahl ungleich Null im Bereich von 1 bis 255 für Fehler.
Der Rückgabestatus kann mit dem Schlüsselwort
return
angegeben werden und wird der Variablen
$?
. Die
return
Anweisung beendet die Funktion. Sie können es sich als Exit-Status der Funktion vorstellen.
#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?
some result 55
Um tatsächlich einen beliebigen Wert von einer Funktion zurückzugeben, müssen wir andere Methoden verwenden. Die einfachste Möglichkeit besteht darin, das Ergebnis der Funktion einer globalen Variablen zuzuweisen:
~ / return_values.sh
#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result
some result
Eine andere, bessere Möglichkeit, einen Wert aus einer Funktion zurückzugeben, besteht darin, den Wert mit echo oder
printf
an
stdout
zu senden, wie unten gezeigt:
#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result
some result
Anstatt einfach die Funktion auszuführen, die die Nachricht an stdout ausgibt,
func_result
wir die Funktionsausgabe der Variablen
func_result
mit der
$()
Befehlsersetzung zu. Die Variable kann später nach Bedarf verwendet werden.
Argumente an Bash-Funktionen übergeben
Um eine beliebige Anzahl von Argumenten an die Bash-Funktion zu übergeben, setzen Sie diese einfach direkt nach dem Namen der Funktion, getrennt durch ein Leerzeichen. Es ist eine gute Praxis, die Argumente in doppelte Anführungszeichen zu setzen, um ein falsches Parsen eines Arguments mit Leerzeichen zu vermeiden.
- Die übergebenen Parameter sind
$1,$2,$3…$n, entsprechend der Position des Parameters nach dem Funktionsnamen. Die Variable$0ist für den Funktionsnamen reserviert. Die Variable$#enthält die Anzahl der Positionsparameter / Argumente, die an das übergeben werden Die Variablen$*und$@alle Positionsparameter / Argumente, die an die Funktion übergeben wurden.- Bei doppelten Anführungszeichen wird
"$*"zu einer durch Leerzeichen getrennten Zeichenfolge erweitert (das erste Zeichen von IFS) -"$1 $2 $n"Bei doppelten Anführungszeichen wird"$@"zu getrennten Zeichenfolgen erweitert -"$1" "$2" "$n".Wenn nicht in doppelte Anführungszeichen gesetzt, sind$*und$@gleich.
- Bei doppelten Anführungszeichen wird
Hier ist ein Beispiel:
~ / passing_arguments.sh
#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"
Fazit
Eine Bash-Funktion ist ein Block von wiederverwendbarem Code, der zur Ausführung einer bestimmten Operation entwickelt wurde. Einmal definiert, kann die Funktion innerhalb eines Skripts mehrfach aufgerufen werden.
Möglicherweise möchten Sie auch erfahren, wie Sie mithilfe einer Bash-Funktion einen einprägsamen Verknüpfungsbefehl für einen längeren Befehl erstellen.
Bash-TerminalMicrosoft Research Asia veranstaltet Gates zum 10-Jahres-Bash
Microsoft Research Asia ist von einem Dutzend Personen 1998 auf über 350 ein Jahrzehnt später gewachsen.
Ausführen von Bash unter Ubuntu unter Windows 10
Wenn Sie Windows Subsystem für Linux aktivieren, können Sie Bash unter Ubuntu in Bash-Skripten von Windows 10 ausführen , Linux-Kommandozeilen-Tools, Linux-First-Tools.
Bash-Arrays
Arrays sind eine der am häufigsten verwendeten und grundlegendsten Datenstrukturen. In diesem Artikel werden die Bash-Arrays behandelt und erläutert, wie Sie sie in Ihren Bash-Skripten verwenden.







