Bash Funktionen & Arrays

5 Kernkonzepte
Die wichtigsten Konzepte für Funktionen und Arrays in Bash: Funktionen · Parameter · Arrays · Array-Schleifen · Array-Operationen Funktionen machen Skripte modular und wiederverwendbar. Arrays ermöglichen die Speicherung und Verarbeitung von Listen und Sammlungen von Daten.

Funktionen – Code modularisieren

function name() { ... }
function name() { Befehle }

Funktionen fassen Codeblöcke zusammen, die mehrfach aufgerufen werden können. Sie verbessern die Lesbarkeit, Wartbarkeit und Wiederverwendbarkeit von Skripten.

Deklarationsformen

Form Beschreibung
function name { ... } Klassische Deklaration (ohne Klammern)
name() { ... } Kurze Deklaration (ohne function)
function name() { ... } Kombinierte Deklaration (beides)
Beispiele
# Funktion deklarieren (Variante 1)
function hallo() {
  echo "Hallo Welt!"
}

# Funktion aufrufen
hallo
# Funktion deklarieren (Variante 2 – kurz)
hallo2() {
  echo "Hallo Welt!"
}

hallo2
Ausgabe:
Hallo Welt!
Hallo Welt!
Tipp: Die kurze Form name() { ... } wird am häufigsten verwendet und ist platzsparender.

Parameter – Werte an Funktionen übergeben

$1, $2, $@, $#
$1 = erster Parameter · $# = Anzahl Parameter

Parameter ermöglichen die Übergabe von Werten an Funktionen. Innerhalb der Funktion werden sie über $1, $2, ... angesprochen.

Parameter-Variablen

Variable Beschreibung
$1, $2, ... Einzelne Parameter in der Reihenfolge
$@ Alle Parameter als einzelne Argumente (in Anführungszeichen)
$* Alle Parameter als ein einzelnes Argument
$# Anzahl der übergebenen Parameter
$0 Name der Funktion oder des Skripts
Beispiele
# Funktion mit Parametern
gruss() {
  name="$1"
  alter="$2"
  echo "Hallo $name, du bist $alter Jahre alt."
}

gruss "Anna" "25"
# Alle Parameter ausgeben
zeige_args() {
  echo "Anzahl: $#"
  echo "Alle: $@"
}

zeige_args "eins" "zwei" "drei"
Ausgabe (erstes Beispiel):
Hallo Anna, du bist 25 Jahre alt.

Ausgabe (zweites Beispiel):
Anzahl: 3
Alle: eins zwei drei
Tipp: Verwenden Sie "$@" in Anführungszeichen, um Parameter mit Leerzeichen korrekt zu übergeben.

Arrays – Listen von Werten

array=(wert1 wert2 wert3)
array=( wert1 wert2 wert3 )

Arrays speichern eine Liste von Werten. Der Zugriff erfolgt über den Index (beginnt bei 0).

Array-Operationen

Operation Beschreibung
array=(a b c) Array deklarieren
${array[0]} Erstes Element (Index 0)
${array[@]} Alle Elemente
${#array[@]} Länge (Anzahl Elemente)
${!array[@]} Alle Indizes
array+=(neuer) Element anhängen
unset array[1] Element löschen
Beispiele
# Array deklarieren
farben=( rot grün blau gelb )

# Zugriff auf Elemente
echo "Erste Farbe: ${farben[0]}"
echo "Zweite Farbe: ${farben[1]}"
echo "Alle Farben: ${farben[@]}"
# Länge und Indizes
echo "Anzahl: ${#farben[@]}"
echo "Indizes: ${!farben[@]}"
# Element anhängen
farben+=( orange )
echo "Neue Liste: ${farben[@]}"
# Element löschen
unset farben[2]
echo "Nach Löschen: ${farben[@]}"
Ausgabe:
Erste Farbe: rot
Zweite Farbe: grün
Alle Farben: rot grün blau gelb
Anzahl: 4
Indizes: 0 1 2 3
Neue Liste: rot grün blau gelb orange
Nach Löschen: rot grün gelb orange
Tipp: Verwenden Sie ${array[@]} in Anführungszeichen, um jedes Element als separates Argument zu behandeln.

Array-Schleifen – Arrays durchlaufen

for i in "${array[@]}"; do ... done
for i in "${array[@]}"; do ... done

Array-Schleifen durchlaufen alle Elemente eines Arrays und führen für jedes Element eine Aktion aus.

Schleifenvarianten

Variante Beschreibung
for i in "${array[@]}" Über Werte iterieren (empfohlen)
for i in "${array[*]}" Alle Werte als ein String (mit Leerzeichen)
for i in ${!array[@]} Über Indizes iterieren
for i in $(seq 0 $((${#array[@]}-1))) Über Index-Bereich iterieren (traditionell)
Beispiele
# Array mit Werten
tiere=( Hund Katze Maus Elefant )

# Über Werte iterieren
for tier in "${tiere[@]}"; do
  echo "Tier: $tier"
done
# Über Indizes iterieren
for i in "${!tiere[@]}"; do
  echo "Index $i: ${tiere[$i]}"
done
# Array von Dateien durchlaufen
dateien=( $(ls *.txt) )
for datei in "${dateien[@]}"; do
  echo "Datei: $datei"
done
Ausgabe (erstes Beispiel):
Tier: Hund
Tier: Katze
Tier: Maus
Tier: Elefant
Tipp: Die Schleife über "${array[@]}" ist die sicherste Methode, da sie jedes Element korrekt behandelt (auch mit Leerzeichen).

Array-Operationen – Slicing, Suchen, Filtern

slice=${array[@]:2:3}
slice=${array[@]:start:laenge}

Array-Operationen ermöglichen das Extrahieren von Teilmengen, Suchen nach Werten und das Filtern von Array-Inhalten.

Operationen im Überblick

Operation Beschreibung
${array[@]:start:len} Slicing – Teil des Arrays ab Index start mit len Elementen
${array[@]/muster/ersatz} Ersetzt Muster in allen Elementen
${array[@]#prefix} Entfernt Prefix von jedem Element
${array[@]%suffix} Entfernt Suffix von jedem Element
grep -q "wert" Prüft, ob Wert im Array vorhanden ist (mit grep)
Beispiele
# Array mit Zahlen
zahlen=( 10 20 30 40 50 60 )

# Slicing: ab Index 2, 3 Elemente
slice="${zahlen[@]:2:3}"
echo "Slice: $slice"
# Ersetzen in allen Elementen
dateien=( datei1.txt datei2.txt datei3.txt )
neue="${dateien[@]/.txt/.bak}"
echo "Neue Dateien: ${neue[*]}"
# Prefix/Suffix entfernen
namen=( /home/user1 /home/user2 /home/user3 )
user="${namen[@]#/home/}"
echo "Benutzer: ${user[*]}"
# Prüfen, ob Wert im Array vorhanden ist
farben=( rot grün blau )
if [[ "${farben[*]}" =~ "grün" ]]; then
  echo "Grün ist vorhanden!"
fi
Ausgabe:
Slice: 30 40 50
Neue Dateien: datei1.bak datei2.bak datei3.bak
Benutzer: user1 user2 user3
Grün ist vorhanden!
Tipp: Slicing ist nützlich, um nur Teile eines Arrays zu verarbeiten. Für komplexere Filterungen kombinieren Sie Arrays mit grep oder awk.

Quick Summary

function()
Funktion deklarieren
$1, $@
Parameter
array=(...)
Array erstellen
for in
Array durchlaufen
[:]
Slicing & mehr