Wie man Funktionen in Bash verwendet

Suraj Joshi 30 Januar 2023
  1. Funktionen in Bash definieren
  2. Umfang der Variablen in der Bash
  3. Rückgabewerte von Funktion in Bash
  4. Übergeben von Argumenten an eine Bash-Funktion
Wie man Funktionen in Bash verwendet

Eine Funktion ist einer der wichtigsten Aspekte jeder Programmiersprache, und sie macht unseren Code wiederverwendbar und lesbar. Derselbe Code, der wiederholt verwendet wird, wird innerhalb einer Funktion geschrieben. Und wenn wir den Codeblock benötigen, rufen wir einfach die definierte Funktion auf.

Funktionen in Bash definieren

Um Funktionen in Bash zu definieren, können wir einen der beiden folgenden Ansätze verwenden:

Bei diesem Ansatz schreiben wir den Namen der Funktion, gefolgt von Klammern. Dann definieren wir die Funktionen innerhalb der geschweiften Klammern. Die Funktionen, die dieses Format verwenden, können in einem der beiden Formate definiert werden:

function_name(){
statements
}
function_name() { statements }

Bei diesem Ansatz geben wir vor dem Funktionsnamen das Schlüsselwort function an.

function_name(){
statements
}
function_name() { statements }

Die Anweisungen innerhalb der geschweiften Klammern bestimmen, was die Funktion tut. Der Name der Funktion hat nichts damit zu tun, was die Funktion tut, aber wir müssen die Funktionsnamen beschreibend machen. Die Definition der Funktion wird nichts bewirken. Um die Befehle in der Funktionsdefinition auszuführen, müssen wir die Funktion aufrufen.

Um die Funktion in Bash aufzurufen, verwenden wir den Namen der Funktion.

#! /bin/bash

greet(){
    echo 'Hello, Folks. Welcome to DelftStack!'
}

greet

Ausgabe:

Hello, Folks. Welcome to DelftStack!

Hier definieren wir die Funktion am Anfang mit dem Namen greet und rufen dann die Funktion auf. Wenn wir die Funktion aufrufen, werden die Anweisungen innerhalb einer Funktionsdefinition ausgeführt, und daher sehen wir Hello, Folks. Welcome to DelftStack! gedruckt im Terminal.

Wir können die Funktion auch mit einem anderen Ansatz definieren als

#! /bin/bash

function greet(){
    echo 'Hello, Folks. Welcome to DelftStack!'
}

greet

Ausgabe:

Hello, Folks. Welcome to DelftStack!

Wir müssen sicherstellen, dass wir die Funktion immer definieren, bevor wir sie aufrufen.

Umfang der Variablen in der Bash

Der Umfang der Variablen kann entweder global oder lokal in Bash wie in anderen Programmiersprachen sein. Der Standardumfang von Variablen ist jedoch immer global, auch wenn er innerhalb des Funktionsumfangs deklariert ist. Wir müssen das Schlüsselwort local verwenden, um eine Variable lokal zu machen.

#! /bin/bash

gvar1=1
gvar2=2

change_variables() {

    local gvar1=10
    gvar2=7
    
    echo "Inside Function: gvar1: $gvar1, gvar2: $gvar2"
}

echo "Before executing function: gvar1: $gvar1, gvar2: $gvar2"

change_variables

echo "After executing function: gvar1: $gvar1, gvar2: $gvar2"

Ausgabe:

Before executing function: gvar1: 1, gvar2: 2
Inside Function: gvar1: 10, gvar2: 7
After executing function: gvar1: 1, gvar2: 7

Hier sind gvar1 und gvar2, die oben deklariert sind, globale Variablen.

Innerhalb der Funktion wird gvar1 als lokale Variable deklariert, da wir das lokale Schlüsselwort mit gvar1 benutzen, während sich gvar2 immer noch auf eine globale Variable bezieht, da sie kein lokale Schlüsselwort hat. Daher wird der Wert von gvar2 global durch die Funktion geändert, während der Wert von gvar1 nur innerhalb der Funktion geändert wird.

Rückgabewerte von Funktion in Bash

Im Gegensatz zu anderen Programmiersprachen erlaubt uns Bash nicht, Werte aus der Funktion zurückzugeben. Der von der Bash-Funktion zurückgegebene Wert ist der Status der letzten in der Funktion ausgeführten Anweisung. Die Zahl 0 steht für den Erfolg, während die Zahl von 1-255 für den Misserfolg steht. Wir können den Exit-Status der Funktion mit dem Schlüsselwort return angeben. Die return-Anweisung beendet die Funktion ebenfalls.

#! /bin/bash

return_value(){
  echo "This function returns 20!"
  return 30
  echo "After return statement"
}

return_value
echo $?

Ausgabe:

This function returns 20!
30

Hier können wir sehen, daß die Funktion return_value den Wert 30 unter Verwendung der return-Anweisung zurückgibt, und der Wert wird der Variablen “$” zugewiesen.

Wir können auch feststellen, daß die Funktion nach der Ausführung der return-Anweisung beendet wird, da Befehle unterhalb der return-Anweisung nicht ausgeführt werden.

Wenn wir einen Wert aus einer Funktion zurückgeben wollen, können wir den Wert einer globalen Variablen zuweisen und von außerhalb der Funktion auf die Variable zugreifen, um den Wert abzurufen.

#! /bin/bash

send_message(){
  message_from_function="Hello From the function!"
}
send_message
echo $message_from_function

Ausgabe:

Hello From the function!

Im Programm weisen wir den zurückzugebenden Wert der globalen Variablen message_from_function zu und greifen dann auf den Rückgabewert der Variablen zu.

Übergeben von Argumenten an eine Bash-Funktion

Um Argumente an eine Bash-Funktion zu übergeben, setzen wir die Argumente einfach hinter die Funktion. Wenn wir mehr als ein Argument an eine Funktion übergeben wollen, trennen wir die Argumente durch ein Leerzeichen. Um ein falsches Verarbeiten von Argumenten zu vermeiden, können wir Argumente in doppelte Anführungszeichen setzen.

Der Zugriff auf die Parameter erfolgt mit $1 $2 und so weiter auf der Grundlage ihrer Position. $0 repräsentiert den Funktionsnamen, während $# die Anzahl der Positionsargumente in der Funktion angibt.

#! /bin/bash

send_message(){
  message_from_function="Hello $1 "
}
send_message
echo $message_from_function "Delft!"

Ausgabe:

Hello Delft!

Hier wird das Argument Delft! an die Funktion übergeben und in der Funktion mit dem Parameter $1 zugegriffen, und wir erhalten Hello Delft! als Endausgabe der Funktion.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn