Shell-Funktionen

ShellShellBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir Shell-Funktionen in Linux erkunden. Shell-Funktionen sind wiederverwendbare Codeblöcke, die bestimmte Aufgaben ausführen und unsere Skripte organisierter und effizienter machen. Wir werden lernen, wie man Funktionen in Shell-Skripten erstellt, aufruft und mit Parametern verwendet. Dieses Lab ist für Anfänger konzipiert, daher werden wir es Schritt für Schritt angehen und jedes Konzept gründlich erklären.

Erstellen Ihrer ersten Shell-Funktion

Beginnen wir mit der Erstellung einer einfachen Shell-Funktion. Shell-Funktionen sind wie Mini-Skripte innerhalb eines größeren Skripts und ermöglichen es Ihnen, Befehle zu gruppieren, die eine bestimmte Aufgabe ausführen.

Zunächst müssen wir eine neue Datei erstellen. Öffnen Sie Ihr Terminal und geben Sie ein:

cd ~/project
touch functions.sh

Dieser Befehl wechselt in das project-Verzeichnis und erstellt eine neue Datei namens functions.sh. In dieser Datei werden unsere Shell-Funktionen gespeichert.

Nun fügen wir unsere erste Funktion hinzu:

#!/bin/bash

## Dies ist eine einfache Funktion
greet() {
  echo "Hello, World!"
}

## Diese Zeile ruft die Funktion auf
greet

Lassen Sie uns dies analysieren:

  • Die erste Zeile #!/bin/bash wird als Shebang bezeichnet. Sie teilt dem System mit, dass bash verwendet werden soll, um dieses Skript zu interpretieren.
  • Wir definieren unsere Funktion mit greet() { }. Alles zwischen den geschweiften Klammern gehört zur Funktion.
  • Innerhalb der Funktion haben wir einen einfachen echo-Befehl, der "Hello, World!" ausgibt.
  • Die letzte Zeile greet ruft unsere Funktion auf.

Nun machen wir unser Skript ausführbar und führen es aus:

chmod +x functions.sh
./functions.sh

Sie sollten sehen:

Hello, World!

Wenn Sie diese Ausgabe nicht sehen, überprüfen Sie noch einmal, ob Sie alles korrekt in der functions.sh-Datei eingegeben haben.

Funktionen mit Parametern

Nachdem wir eine grundlegende Funktion erstellt haben, machen wir sie nun flexibler, indem wir Parameter hinzufügen. Parameter ermöglichen es uns, Informationen an unsere Funktionen zu übergeben.

Öffnen Sie erneut die Datei functions.sh und ersetzen Sie den Inhalt durch folgenden Code:

#!/bin/bash

## Funktion mit einem Parameter
greet() {
  echo "Hello, $1!"
}

## Funktion mit mehreren Parametern
calculate() {
  echo "The sum of $1 and $2 is $(($1 + $2))"
}

## Funktionen mit Argumenten aufrufen
greet "Alice"
calculate 5 3

Lassen Sie uns diesen Code untersuchen:

  • In der greet-Funktion bezieht sich $1 auf das erste an die Funktion übergebene Argument.
  • In der calculate-Funktion beziehen sich $1 und $2 jeweils auf das erste und zweite Argument.
  • $(($1 + $2)) führt eine arithmetische Addition der beiden Parameter durch.
./functions.sh

Sie sollten sehen:

Hello, Alice!
The sum of 5 and 3 is 8

Wenn Sie diese Ausgabe nicht sehen, stellen Sie sicher, dass Sie die Änderungen an der Datei korrekt gespeichert haben.

Rückgabewerte von Funktionen

In Shell-Skripten geben Funktionen nicht auf die gleiche Weise Werte zurück wie in anderen Programmiersprachen. Stattdessen können sie entweder ein Ergebnis ausgeben, das aufgefangen werden kann, oder eine globale Variable ändern. Lassen Sie uns beide Methoden untersuchen.

Öffnen Sie erneut die Datei functions.sh und aktualisieren Sie den Inhalt mit folgendem Code:

#!/bin/bash

## Funktion, die ein Ergebnis ausgibt
get_square() {
  echo $(($1 * $1))
}

## Funktion, die eine globale Variable ändert
RESULT=0
set_global_result() {
  RESULT=$(($1 * $1))
}

## Das ausgegebene Ergebnis aufnehmen
square_of_5=$(get_square 5)
echo "The square of 5 is $square_of_5"

## Die Funktion verwenden, um die globale Variable zu ändern
set_global_result 6
echo "The square of 6 is $RESULT"

Lassen Sie uns dies analysieren:

  • Die get_square-Funktion verwendet echo, um das Ergebnis auszugeben, das wir mit der Syntax $() aufnehmen.
  • Die set_global_result-Funktion ändert die globale Variable RESULT.
  • Wir verwenden $(), um die Ausgabe von get_square in einer Variablen aufzunehmen.
  • Wir rufen set_global_result auf, das RESULT ändert, und geben dann RESULT aus.

Speichern Sie die Datei und führen Sie sie aus:

./functions.sh

Sie sollten sehen:

The square of 5 is 25
The square of 6 is 36

Wenn Sie diese Ausgabe nicht sehen, überprüfen Sie die Datei functions.sh noch einmal auf Tippfehler.

Verständnis des Variablenbereichs (Variable Scope)

In Shell-Skripten sind Variablen standardmäßig global. Das bedeutet, dass sie von überall im Skript aus zugänglich sind. Allerdings können Sie das Schlüsselwort local verwenden, um Variablen zu erstellen, die nur innerhalb einer Funktion zugänglich sind. Dies wird als lokaler Bereich (local scope) bezeichnet.

Lassen Sie uns unsere functions.sh-Datei ändern, um dieses Konzept zu demonstrieren.

Aktualisieren Sie den Inhalt mit folgendem Code:

#!/bin/bash

## Globale Variable
GLOBAL_VAR="I'm global"

## Funktion mit einer lokalen Variable
demonstrate_scope() {
  local LOCAL_VAR="I'm local"
  echo "Inside function: GLOBAL_VAR = $GLOBAL_VAR"
  echo "Inside function: LOCAL_VAR = $LOCAL_VAR"
}

## Die Funktion aufrufen
demonstrate_scope

echo "Outside function: GLOBAL_VAR = $GLOBAL_VAR"
echo "Outside function: LOCAL_VAR = $LOCAL_VAR"

Hier ist, was in diesem Skript passiert:

  • Wir definieren eine globale Variable GLOBAL_VAR.
  • Innerhalb der demonstrate_scope-Funktion definieren wir eine lokale Variable LOCAL_VAR mit dem Schlüsselwort local.
  • Wir geben beide Variablen innerhalb der Funktion aus.
  • Nach dem Aufruf der Funktion versuchen wir, beide Variablen erneut außerhalb der Funktion auszugeben.

Speichern Sie die Datei und führen Sie sie aus:

./functions.sh

Sie sollten eine Ausgabe ähnlich dieser sehen:

Inside function: GLOBAL_VAR = I'm global
Inside function: LOCAL_VAR = I'm local
Outside function: GLOBAL_VAR = I'm global
Outside function: LOCAL_VAR =

Beachten Sie, dass LOCAL_VAR leer ist, wenn sie außerhalb der Funktion zugegriffen wird. Dies liegt daran, dass lokale Variablen nur innerhalb der Funktion zugänglich sind, in der sie definiert werden.

Fortgeschrittene Funktion - ENGLISH_CALC

Nachdem wir die Grundlagen von Shell-Funktionen behandelt haben, erstellen wir nun eine fortgeschrittenere Funktion namens ENGLISH_CALC. Diese Funktion nimmt drei Argumente entgegen: zwei Zahlen und eine Operation (plus, minus oder times).

Ersetzen Sie den Inhalt durch folgenden Code:

#!/bin/bash

ENGLISH_CALC() {
  local num1=$1
  local operation=$2
  local num2=$3
  local result

  case $operation in
    plus)
      result=$((num1 + num2))
      echo "$num1 + $num2 = $result"
      ;;
    minus)
      result=$((num1 - num2))
      echo "$num1 - $num2 = $result"
      ;;
    times)
      result=$((num1 * num2))
      echo "$num1 * $num2 = $result"
      ;;
    *)
      echo "Invalid operation. Please use 'plus', 'minus', or 'times'."
      return 1
      ;;
  esac
}

## Die Funktion testen
ENGLISH_CALC 3 plus 5
ENGLISH_CALC 5 minus 1
ENGLISH_CALC 4 times 6
ENGLISH_CALC 2 divide 2 ## This should show an error message

Lassen Sie uns diese Funktion analysieren:

  • Wir verwenden local-Variablen, um unsere Eingaben und Ergebnisse zu speichern. Dies ist eine gute Praxis, um Konflikte mit globalen Variablen zu vermeiden.
  • Wir verwenden eine case-Anweisung, um verschiedene Operationen zu behandeln. Dies ähnelt einer switch-Anweisung in anderen Sprachen.
  • Für jede gültige Operation führen wir die Berechnung durch und geben das Ergebnis aus.
  • Wenn eine ungültige Operation angegeben wird, geben wir eine Fehlermeldung aus und geben 1 zurück (in Shell-Skripten gibt ein Rückgabewert ungleich Null auf einen Fehler hin).
  • Am Ende testen wir unsere Funktion mit verschiedenen Eingaben, einschließlich einer ungültigen Operation.

Speichern Sie die Datei und führen Sie sie aus:

./functions.sh

Sie sollten die folgende Ausgabe sehen:

3 + 5 = 8
5 - 1 = 4
4 * 6 = 24
Invalid operation. Please use 'plus', 'minus', or 'times'.

Wenn Sie diese Ausgabe nicht sehen, überprüfen Sie die Datei functions.sh noch einmal auf Tippfehler.

Zusammenfassung

In diesem Lab haben wir Shell-Funktionen in Linux untersucht, beginnend mit den Grundlagen und fortschreitend zu fortgeschrittenen Konzepten. Wir haben gelernt, wie man:

  1. Einfache Funktionen erstellt und aufruft
  2. Mit Funktionsparametern arbeitet
  3. Rückgabewerte von Funktionen mit echo und globalen Variablen zurückgibt
  4. Den Variablenbereich versteht und lokale Variablen verwendet
  5. Eine komplexere Funktion erstellt, die arithmetische Operationen verarbeitet

Shell-Funktionen sind leistungsstarke Werkzeuge, die Ihnen helfen können, organisierter, effizienter und wiederverwendbareren Code zu schreiben. Sie ermöglichen es Ihnen, komplexe Skripte in kleinere, handhabbare Teile aufzuteilen, was Ihre Skripte leichter verständlich und wartbar macht.

Durch das Beherrschen von Shell-Funktionen können Sie ausgefeiltere Shell-Skripte schreiben und komplexe Aufgaben in einer Linux-Umgebung effektiver automatisieren. Denken Sie daran, dass Übung der Schlüssel zur Meisterschaft in der Shell-Skripting ist. Versuchen Sie, die von uns erstellten Funktionen zu ändern oder eigene zu erstellen, um spezifische Probleme zu lösen, die Sie bei der Arbeit mit Linux begegnen.