Einführung
Beim Programmieren müssen Sie häufig eine Liste zusammengehöriger Elemente speichern, zum Beispiel Dateinamen, Benutzer-IDs oder Servernamen. Statt für jedes Element eine eigene Variable anzulegen, etwa file1, file2 und file3, können Sie eine einzelne Variable verwenden, die als Array bezeichnet wird.
Mit einem Array speichern Sie mehrere Werte unter einem Namen. Sie können es sich als eine Liste vorstellen, deren Elemente Sie hinzufügen, entfernen und auslesen können.
Arrays sind nützlich, sobald eine einzelne Variable nicht mehr ausreicht. Serverlisten, Dateinamen, Paketnamen und Benutzerkonten sind Beispiele für Daten, die typischerweise als Gruppe und nicht als einzelner Wert auftreten.
In diesem Labor lernen Sie:
- ein Array mit einer anfänglichen Menge von Werten zu deklarieren;
- neue Elemente an das Array anzuhängen;
- alle Elemente des Arrays auszugeben;
- das Array zu durchlaufen, um jedes Element einzeln zu verarbeiten.
Ein Array deklarieren
Beginnen Sie mit einem Skript, das eine Namensliste enthält.
Arrays bieten der Shell eine Möglichkeit, zusammengehörige Werte als Gruppe zu behandeln, anstatt sie auf viele einzelne Variablen zu verteilen. Das ist nützlich, wenn Ihr Skript eine Sammlung statt eines einzelnen Elements verarbeiten soll.
Erstellen Sie das Skript array_lab.sh:
cd ~/project
nano array_lab.sh
Geben Sie den folgenden Code ein, um ein Array zu initialisieren:
#!/bin/bash
## Define an array named 'names'
names=("Alice" "Bob")
Syntaxregeln:
- Verwenden Sie runde Klammern
(), um die Werteliste einzuschließen. - Trennen Sie die Elemente durch Leerzeichen und nicht durch Kommas.
("Alice" "Bob")ist korrekt.("Alice", "Bob")ist falsch, weil das Komma als Teil der Zeichenkette"Alice,"behandelt würde.
Dieser letzte Punkt zeigt eine allgemeine Regel der Shell: Die Bash-Syntax wirkt oft einfach, aber kleine Unterschiede bei Satzzeichen können die Bedeutung verändern. Arrays sind durch Leerzeichen getrennte Listen und keine durch Kommas getrennten Listen wie in manchen anderen Programmiersprachen.
Speichern Sie die Datei (Ctrl+O) und beenden Sie den Editor (Ctrl+X).
Prüfen Sie den Inhalt der Datei:
cat array_lab.sh
Sie haben die Array-Variable erfolgreich definiert, obwohl das Skript noch keine Ausgabe erzeugt.
Ein Element zum Array hinzufügen
Oft kennen Sie zu Beginn noch nicht alle Elemente Ihrer Liste. Möglicherweise müssen Sie während der Ausführung Ihres Skripts dynamisch weitere Elemente hinzufügen.
Das ist in realen Skripten üblich. Sie könnten beispielsweise ein Array mit passenden Dateien, aktiven Hosts, fehlgeschlagenen Diensten oder während der Ausführung gefundenen Paketnamen erstellen.
Mit dem Operator += können Sie ein neues Element am Ende eines Arrays hinzufügen.
Öffnen Sie das Skript:
nano array_lab.sh
Fügen Sie am Ende die folgende Zeile hinzu:
## Append 'Charlie' to the list
names+=("Charlie")
Erklärung:
+=bedeutet „an den vorhandenen Wert anhängen“.("Charlie")schließt das neue Element in Klammern ein, damit es als Array-Element behandelt wird.
Ihre Datei sollte jetzt so aussehen:
#!/bin/bash
## Define an array named 'names'
names=("Alice" "Bob")
## Append 'Charlie' to the list
names+=("Charlie")
Speichern Sie die Datei und beenden Sie den Editor.
Alle Elemente ausgeben
Um zu prüfen, ob unser Array alle erwarteten Werte enthält, können wir alle Elemente auf einmal ausgeben.
In Bash unterscheidet sich der Zugriff auf eine Array-Variable geringfügig vom Zugriff auf eine normale Variable. Verwenden Sie ${array_name[@]}, um alle Elemente zu erweitern.
@ist ein spezielles Symbol und steht für „alle Elemente“.
Die Schreibweise ${...} ist ein weiteres Beispiel für Parameter Expansion. Bash gibt den Variablennamen nicht einfach wörtlich aus, sondern ersetzt ihn vor der Übergabe des endgültigen Textes an echo durch die im Array gespeicherten Elemente.
Öffnen Sie array_lab.sh:
nano array_lab.sh
Fügen Sie den Ausgabebefehl hinzu:
## Print all elements in the array
echo "All Names: ${names[@]}"
Speichern Sie die Datei und beenden Sie den Editor.
Machen Sie das Skript ausführbar und führen Sie es aus:
chmod +x array_lab.sh
./array_lab.sh
Ergebnis:
All Names: Alice Bob Charlie
Die Schreibweise ${names[@]} wurde zu einer durch Leerzeichen getrennten Liste aller Elemente des Arrays erweitert.
Das Array durchlaufen
Die Ausgabe der gesamten Liste ist zum Debuggen nützlich. In der Regel möchten Sie jedoch jedes Element einzeln verarbeiten. Beispielsweise könnten Sie für jeden Namen in der Liste ein Benutzerkonto erstellen wollen.
Dafür verwenden Sie eine for-Schleife.
Öffnen Sie array_lab.sh:
nano array_lab.sh
Fügen Sie die Schleife am Ende ein:
echo "--- Processing Names ---"
## Loop through each item in the array
for name in "${names[@]}"; do
echo "Hello, $name"
done
Ihr vollständiges Skript sollte jetzt so aussehen:
#!/bin/bash
names=("Alice" "Bob")
names+=("Charlie")
echo "All Names: ${names[@]}"
echo "--- Processing Names ---"
for name in "${names[@]}"; do
echo "Hello, $name"
done
Speichern Sie die Datei und beenden Sie den Editor. Führen Sie das Skript aus:
./array_lab.sh
Ergebnis:
Die Anführungszeichen um "${names[@]}" sind ebenfalls wichtig. Sie sorgen dafür, dass jedes Array-Element als eigenes Element erhalten bleibt. Das ist wichtig, wenn Werte Leerzeichen enthalten. In realen Skripten spielt dieses Detail eine größere Rolle, weil Dateinamen und Argumente nicht immer aus einfachen Zeichenketten ohne Leerzeichen bestehen.
All Names: Alice Bob Charlie
--- Processing Names ---
Hello, Alice
Hello, Bob
Hello, Charlie
Die Schleife nahm jeden Namen aus dem Array, wies ihn der Variable name zu und führte den Codeblock aus. Das ist die häufigste Methode, um Listen in Bash zu verarbeiten.
Zusammenfassung
In diesem Labor haben Sie die Grundlagen der Array-Verwendung in Bash kennengelernt:
- Deklaration (
name=(...)): Eine Liste mit Anfangswerten erstellen. - Anhängen (
+=): Dynamisch neue Elemente zu einem vorhandenen Array hinzufügen. - Erweiterung (
${name[@]}): Alle Elemente des Arrays abrufen. - Iteration (
for): Jedes Element der Liste nacheinander verarbeiten.
Arrays sind unverzichtbar, wenn Skripte mehrere Dateien, Benutzer oder Datenpunkte effizient verarbeiten müssen.



