Android

Bash-Funktionen

Bash Tutorial #6 - Funktionen

Bash Tutorial #6 - Funktionen

Inhaltsverzeichnis:

Anonim

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:

  1. 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 function reservierten 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 3 wir die Funktion, indem wir ihr einen Namen geben und die geschweifte Klammer { öffnen, die den Anfang des Funktionskörpers markiert. Zeile 4 ist der Funktionskörper. Der Funktionskörper kann mehrere Befehle und Variablendeklarationen enthalten. Zeile 5 , die schließende geschweifte Klammer } , definiert das Ende der Funktion hello_world Zeile 7 wir 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.

~ / return_values.sh

#!/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:

~ / return_values.sh

#!/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 $0 ist 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.

Hier ist ein Beispiel:

~ / passing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello 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-Terminal