Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
modul:m122:learningunits:lu07:funktionen [2024/11/26 06:36] – angelegt msuter | modul:m122:learningunits:lu07:funktionen [2024/12/12 09:24] (aktuell) – [Variablen in Funktionen] msuter | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== LU07a - Funktion definieren ====== | ====== LU07a - Funktion definieren ====== | ||
- | ### Einführung in Funktionen in Bash | + | [[https:// |
+ | <WRAP center round todo 60%> | ||
Funktionen in Bash sind eine Möglichkeit, | Funktionen in Bash sind eine Möglichkeit, | ||
- | #### Definition einer Funktion | + | </ |
- | Funktionen werden in Bash folgendermaßen definiert: | + | |
- | ```bash | + | ===== Definition einer Funktion ===== |
+ | Funktionen werden in Bash folgendermassen definiert: | ||
+ | |||
+ | < | ||
function name { | function name { | ||
# Befehle | # Befehle | ||
} | } | ||
- | ``` | + | </ |
Alternativ kannst du die `function`-Schlüsselwort weglassen: | Alternativ kannst du die `function`-Schlüsselwort weglassen: | ||
- | ```bash | + | < |
name() { | name() { | ||
# Befehle | # Befehle | ||
} | } | ||
- | ``` | + | </ |
+ | |||
+ | ===== Aufrufen einer Funktion ===== | ||
- | #### Aufrufen einer Funktion | ||
Eine Funktion wird durch ihren Namen aufgerufen, ohne Klammern: | Eine Funktion wird durch ihren Namen aufgerufen, ohne Klammern: | ||
- | ```bash | + | < |
name | name | ||
- | ``` | + | </ |
+ | |||
+ | ==== Beispiel ==== | ||
- | #### Beispiel | ||
Hier ist ein einfaches Beispiel, das eine Funktion namens `greet` definiert: | Hier ist ein einfaches Beispiel, das eine Funktion namens `greet` definiert: | ||
- | ```bash | + | < |
#!/bin/bash | #!/bin/bash | ||
Zeile 38: | Zeile 43: | ||
greet " | greet " | ||
- | ``` | + | </ |
**Ausgabe: | **Ausgabe: | ||
- | ``` | + | < |
Hallo, Welt! | Hallo, Welt! | ||
- | ``` | + | </ |
+ | |||
+ | <WRAP center round tip 60%> | ||
+ | Beachte, dass die Definition der Funktion **vor** dem Aufruf stehen muss. | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Parameter in Funktionen ===== | ||
- | #### Parameter in Funktionen | ||
Funktionen können Argumente wie Skripte selbst annehmen. Diese werden mit `$1`, `$2` usw. innerhalb der Funktion referenziert, | Funktionen können Argumente wie Skripte selbst annehmen. Diese werden mit `$1`, `$2` usw. innerhalb der Funktion referenziert, | ||
- | #### Rückgabewerte | + | ===== Rückgabewerte |
Funktionen können numerische Rückgabewerte verwenden, die mit dem Befehl `return` gesetzt werden: | Funktionen können numerische Rückgabewerte verwenden, die mit dem Befehl `return` gesetzt werden: | ||
- | ```bash | + | < |
summe() { | summe() { | ||
return $(($1 + $2)) | return $(($1 + $2)) | ||
Zeile 57: | Zeile 69: | ||
summe 3 5 | summe 3 5 | ||
echo $? # Gibt 8 aus | echo $? # Gibt 8 aus | ||
- | ``` | + | </ |
Nicht-numerische Werte können über `echo` zurückgegeben und mit Command Substitution (`$(...)`) erfasst werden: | Nicht-numerische Werte können über `echo` zurückgegeben und mit Command Substitution (`$(...)`) erfasst werden: | ||
- | ```bash | + | < |
get_date() { | get_date() { | ||
echo $(date) | echo $(date) | ||
Zeile 67: | Zeile 79: | ||
current_date=$(get_date) | current_date=$(get_date) | ||
echo " | echo " | ||
- | ``` | + | </ |
+ | |||
+ | ===== Variablen in Funktionen ===== | ||
+ | In Bash sind alle Variablen standardmässig als '' | ||
+ | Daher kann jeder Teil eines Bash-Scripts, | ||
+ | Wir können jedoch eine Variable innerhalb der Funktion als '' | ||
+ | Dadurch vermeiden wir Konflikte mit anderen Variablen, die den gleichen Bezeichner haben. | ||
+ | |||
+ | | <code bash> | ||
+ | function doIt() { | ||
+ | text = ' | ||
+ | } | ||
+ | |||
+ | text = ' | ||
+ | doIt | ||
+ | echo "Hello $text" | ||
+ | </ | ||
+ | function doIt() { | ||
+ | local text = ' | ||
+ | } | ||
+ | |||
+ | text = ' | ||
+ | doIt | ||
+ | echo "Hello $text" | ||
+ | </ | ||
+ | | Hello World | Hello Universe | | ||
- | Mit Funktionen in Bash lassen sich also Skripte modularer und effizienter gestalten. |