6.2 Funktionen, die Funktionen aufrufen
Selbstverständlich kann eine Funktion auch eine andere Funktion aufrufen – man spricht auch vom Schachteln der Funktionen. Es spielt dabei eigentlich keine Rolle, in welcher Reihenfolge Sie die einzelnen Funktionen aufrufen, da alle Funktionen ohnehin erst vom Hauptprogramm aufgerufen werden. Die Hauptsache ist (wie gehabt), dass alle Funktionen vor der Hauptfunktion definiert sind.
# Demonstriert verschachtelte Funktionsaufrufe
# Name: afunc4
# Die Funktion func1
func1() {
echo "Ich bin func1 ..."
}
# Die Funktion func2
func2() {
echo "Ich bin func2 ..."
}
# Die Funktion func3
func3() {
echo "Ich bin func 3 ..."
func1
func2
echo "func3 ist fertig"
}
# Das Hauptprogramm
func3
Das Script bei der Ausführung:
you@host > ./afunc4
Ich bin func 3 ...
Ich bin func1 ...
Ich bin func2 ...
func3 ist fertig
Natürlich können Sie in der Shell auch Funktionen schreiben, die sich wieder selbst aufrufen. Bei diesem Konzept handelt es sich nicht um eines der Shell, sondern um ein Konzept der Programmierung im Allgemeinen. Dies wird als Rekursion bezeichnet. Eine Rekursion verwendet man, indem man mehrmals einen Codeabschnitt (genauer eine Funktion) wiederholt. Hierbei übergibt man das Ergebnis eines Funktionsaufrufs als Argument an den nächsten sich selbst aufrufenden Funktionsaufruf. Allerdings werden Sie als Systemadministrator wohl eher selten auf Rekursionen treffen. Vorwiegend werden mit Rekursionen mathematische Probleme aller Art gelöst. Das folgende Beispiel demonstriert die Berechnung der Fakultät in rekursiver Form (hier werden wieder einige Dinge vorweggenommen, welche Ihnen aber in diesem Kapitel noch näher erläutert werden).
# Demonstriert die Verwendung von Rekursionen
# Name: afakul
fakul() {
value=$1 # erstes Argument des Funktionsaufrufs an value
# Wenn value kleiner als 1, den Wert 1 ausgeben und beenden
[ $((value)) -le 1 ] && { echo 1; return; }
# Ansonsten mit einem rekursiven Aufruf fortfahren
echo $(($value * `fakul $value-1` ))
}
fakul $1
Das Script bei der Ausführung:
you@host > ./afakul 20
200
you@host > ./afakul 9
45
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|