LU07a - Funktion definieren

ShellProg - Kapitel 6.1

Funktionen in Bash sind eine Möglichkeit, wiederverwendbaren Code zu schreiben. Sie ermöglichen es, eine Gruppe von Befehlen in einer benannten Einheit zu bündeln, die an beliebiger Stelle im Skript aufgerufen werden kann. Das verbessert die Lesbarkeit und Wartbarkeit von Shell-Skripten.

Definition einer Funktion

Funktionen werden in Bash folgendermassen definiert:

function name {
    # Befehle
}

Alternativ kannst du die `function`-Schlüsselwort weglassen:

name() {
    # Befehle
}

Aufrufen einer Funktion

Eine Funktion wird durch ihren Namen aufgerufen, ohne Klammern:

name

Beispiel

Hier ist ein einfaches Beispiel, das eine Funktion namens `greet` definiert:

#!/bin/bash
 
greet() {
    echo "Hallo, $1!"
}
 
greet "Welt"  # Aufruf der Funktion mit einem Argument

Ausgabe:

Hallo, Welt!

Beachte, dass die Definition der Funktion vor dem Aufruf stehen muss.

Parameter in Funktionen

Funktionen können Argumente wie Skripte selbst annehmen. Diese werden mit `$1`, `$2` usw. innerhalb der Funktion referenziert, wobei `$0` der Name des Skripts ist.

Rückgabewerte

Funktionen können numerische Rückgabewerte verwenden, die mit dem Befehl `return` gesetzt werden:

summe() {
    return $(($1 + $2))
}
 
summe 3 5
echo $?  # Gibt 8 aus

Nicht-numerische Werte können über `echo` zurückgegeben und mit Command Substitution (`$(…)`) erfasst werden:

get_date() {
    echo $(date)
}
 
current_date=$(get_date)
echo "Aktuelles Datum: $current_date"

Variablen in Funktionen

In Bash sind alle Variablen standardmässig als global definiert. Daher kann jeder Teil eines Bash-Scripts, auch Funktionen, auf alle Variablen zugreifen. Wir können jedoch eine Variable innerhalb der Funktion als local definieren. Dadurch vermeiden wir Konflikte mit anderen Variablen, die den gleichen Bezeichner haben.

function doIt() {
  text = 'World'
}
 
text = 'Universe'
doIt
echo "Hello $text"
function doIt() {
  local text = 'World'
}
 
text = 'Universe'
doIt
echo "Hello $text"
Hello World Hello Universe