Unix / Linux - Shell-Funktionen

In diesem Kapitel werden wir detailliert auf die Shell-Funktionen eingehen. Mit Funktionen können Sie die Gesamtfunktionalität eines Skripts in kleinere logische Unterabschnitte aufteilen, die dann bei Bedarf zur Ausführung ihrer einzelnen Aufgaben aufgerufen werden können.

Die Verwendung von Funktionen zur Ausführung sich wiederholender Aufgaben ist eine hervorragende Möglichkeit zum Erstellen code reuse. Dies ist ein wichtiger Bestandteil moderner objektorientierter Programmierprinzipien.

Shell-Funktionen ähneln Unterprogrammen, Prozeduren und Funktionen in anderen Programmiersprachen.

Funktionen erstellen

Um eine Funktion zu deklarieren, verwenden Sie einfach die folgende Syntax:

function_name () { 
   list of commands
}

Der Name Ihrer Funktion ist function_nameund das ist es, was Sie verwenden werden, um es von einer anderen Stelle in Ihren Skripten aufzurufen. Dem Funktionsnamen müssen Klammern folgen, gefolgt von einer Liste von Befehlen in geschweiften Klammern.

Beispiel

Das folgende Beispiel zeigt die Verwendung der Funktion -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello

Bei der Ausführung erhalten Sie folgende Ausgabe:

$./test.sh
Hello World

Übergeben Sie Parameter an eine Funktion

Sie können eine Funktion definieren, die beim Aufrufen der Funktion Parameter akzeptiert. Diese Parameter würden durch dargestellt$1, $2 und so weiter.

Es folgt ein Beispiel, in dem wir zwei Parameter Zara und Ali übergeben und diese Parameter dann in der Funktion erfassen und drucken.

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
}

# Invoke your function
Hello Zara Ali

Bei der Ausführung erhalten Sie folgendes Ergebnis:

$./test.sh
Hello World Zara Ali

Rückgabe von Werten aus Funktionen

Wenn Sie eine ausführen exit Befehl aus einer Funktion heraus bewirkt dies nicht nur, dass die Ausführung der Funktion, sondern auch des Shell-Programms, das die Funktion aufgerufen hat, beendet wird.

Wenn Sie stattdessen nur die Ausführung der Funktion beenden möchten, gibt es eine Möglichkeit, aus einer definierten Funktion herauszukommen.

Je nach Situation können Sie mit der Funktion einen beliebigen Wert aus Ihrer Funktion zurückgeben return Befehl, dessen Syntax wie folgt lautet:

return code

Hier code kann alles sein, was Sie hier auswählen, aber natürlich sollten Sie etwas auswählen, das im Kontext Ihres gesamten Skripts sinnvoll oder nützlich ist.

Beispiel

Die folgende Funktion gibt einen Wert von 10 zurück -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
   return 10
}

# Invoke your function
Hello Zara Ali

# Capture value returnd by last command
ret=$?

echo "Return value is $ret"

Bei der Ausführung erhalten Sie folgendes Ergebnis:

$./test.sh
Hello World Zara Ali
Return value is 10

Verschachtelte Funktionen

Eine der interessanteren Eigenschaften von Funktionen ist, dass sie sich selbst und auch andere Funktionen aufrufen können. Eine Funktion, die sich selbst aufruft, wird als a bezeichnetrecursive function.

Das folgende Beispiel zeigt die Verschachtelung zweier Funktionen:

#!/bin/sh

# Calling one function from another
number_one () {
   echo "This is the first function speaking..."
   number_two
}

number_two () {
   echo "This is now the second function speaking..."
}

# Calling function one.
number_one

Bei der Ausführung erhalten Sie folgendes Ergebnis:

This is the first function speaking...
This is now the second function speaking...

Funktionsaufruf von Prompt

Sie können Definitionen für häufig verwendete Funktionen in Ihre .profile. Diese Definitionen sind bei jeder Anmeldung verfügbar und können an der Eingabeaufforderung verwendet werden.

Alternativ können Sie die Definitionen beispielsweise in einer Datei gruppieren test.shund führen Sie dann die Datei in der aktuellen Shell aus, indem Sie - eingeben

$. test.sh

Dies bewirkt, dass Funktionen definiert werden, die im Inneren definiert sind test.sh zu lesen und für die aktuelle Shell wie folgt zu definieren -

$ number_one
This is the first function speaking...
This is now the second function speaking...
$

Verwenden Sie den Befehl unset mit dem Befehl, um die Definition einer Funktion aus der Shell zu entfernen .fMöglichkeit. Dieser Befehl wird auch verwendet, um die Definition einer Variablen in der Shell zu entfernen.

$ unset -f function_name