GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Anfängerserie Nr. 4:Verwenden von Arrays in Bash

Arrays zur Rettung!

Bisher haben Sie eine begrenzte Anzahl von Variablen in Ihrem Bash-Skript verwendet, Sie haben nur wenige Variablen erstellt, um ein oder zwei Dateinamen und Benutzernamen zu speichern.

Aber was ist, wenn Sie mehr als nur wenige Variablen in Ihren Bash-Skripten benötigen? Angenommen, Sie möchten ein Bash-Skript erstellen, das hundert verschiedene Eingaben von einem Benutzer liest, werden Sie 100 Variablen erstellen?

Glücklicherweise ist dies nicht erforderlich, da Arrays eine viel bessere Lösung bieten.

Erstellen Ihres ersten Arrays in einem Bash-Skript

Angenommen, Sie möchten ein Bash-Skript timestamp.sh erstellen die den Zeitstempel von fünf verschiedenen Dateien aktualisiert.

Verwenden Sie zunächst den naiven Ansatz, fünf verschiedene Variablen zu verwenden:

#!/bin/bash

file1="f1.txt"
file2="f2.txt"
file3="f3.txt"
file4="f4.txt"
file5="f5.txt"

touch $file1
touch $file2
touch $file3
touch $file4
touch $file5

Anstatt fünf Variablen zu verwenden, um den Wert der fünf Dateinamen zu speichern, erstellen Sie jetzt ein Array, das alle Dateinamen enthält. Hier ist die allgemeine Syntax eines Arrays in Bash:

array_name=(value1 value2 value3 … )

Jetzt können Sie also ein Array mit dem Namen files erstellen, das alle fünf Dateinamen speichert, die Sie in timestamp.sh verwendet haben Skript wie folgt:

files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")

Wie Sie sehen können, ist dies viel sauberer und effizienter, da Sie fünf Variablen durch nur ein Array ersetzt haben!

Zugriff auf Array-Elemente in Bash

Das erste Element eines Arrays beginnt beim Index 0 Um also auf das n-te Element des Arrays zuzugreifen, verwenden Sie den n -1 Index.

Um beispielsweise den Wert des Elements 2 Ihres Dateiarrays auszugeben, können Sie die folgende echo-Anweisung verwenden:

echo ${files[1]}

und um den Wert des 3-Elements Ihres Dateiarrays zu drucken, können Sie Folgendes verwenden:

echo ${files[2]}

und so weiter.

Das folgende Bash-Skript reverse.sh würde alle fünf Werte in Ihrem Datei-Array in umgekehrter Reihenfolge ausgeben, beginnend mit dem letzten Array-Element:

#!/bin/bash

files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")

echo ${files[4]}
echo ${files[3]}
echo ${files[2]}
echo ${files[1]}
echo ${files[0]}

Ich weiß, Sie fragen sich vielleicht, warum so viele Echo-Anweisungen und warum ich hier keine Schleife verwende. Das liegt daran, dass ich beabsichtige, Bash-Loop-Konzepte später in dieser Serie einzuführen .

Sie können auch alle Array-Elemente auf einmal ausdrucken:

echo ${files[*]}

f1.txt f2.txt f3.txt f4.txt f5.txt

Sie können die Gesamtzahl der Array-Elemente der Datei drucken, d. h. die Größe des Arrays :

echo ${#files[@]}

5

Sie können auch den Wert jedes Elements eines Arrays aktualisieren; Beispielsweise können Sie den Wert des ersten Elements des Dateiarrays in „a.txt“ ändern, indem Sie die folgende Zuweisung verwenden:

files[0]="a.txt"

Hinzufügen von Array-Elementen in Bash

Lassen Sie uns ein Array erstellen, das die Namen der gängigen Linux-Distributionen enthält:

distros=("Ubuntu" "Red Hat" "Fedora")

Das Distributions-Array current enthält drei Elemente. Sie können den += verwenden -Operator zum Hinzufügen (Anhängen) eines Elements an das Ende des Arrays.

Beispielsweise können Sie Kali wie folgt an das distros-Array anhängen:

distros+=("Kali")

Jetzt enthält das distros-Array genau vier Array-Elemente, wobei Kali das letzte Element des Arrays ist.

Löschen von Array-Elementen in Bash

Lassen Sie uns zuerst ein Zahlenarray erstellen, das die Zahlen von 1 bis 5 speichert:

num=(1 2 3 4 5)

Sie können alle Werte im Zahlenarray drucken:

echo ${num[*]}

1 2 3 4 5

Sie können das 3-Element des Zahlenarrays löschen, indem Sie unset verwenden Shell eingebaut:

unset num[2]

Wenn Sie nun alle Werte des num-Arrays drucken:

echo ${num[*]}
1 2 4 5

Wie Sie sehen können, wurde das dritte Element des Arrays num gelöscht.

Auf die gleiche Weise können Sie auch das gesamte Zahlenarray löschen:

unset num

Hybrid-Arrays mit unterschiedlichen Datentypen erstellen

Im Gegensatz zu vielen anderen Programmiersprachen können Sie in Bash ein Array erstellen, das verschiedene Datentypen enthält. Sehen Sie sich die folgende user.sh an Bash-Skript:

#!/bin/bash

user=("john" 122 "sudo,developers" "bash")

echo "User Name: ${user[0]}"
echo "User ID: ${user[1]}"
echo "User Groups: ${user[2]}"
echo "User Shell: ${user[3]}"

Beachten Sie, dass das Benutzer-Array vier Elemente enthält:

  1. "John" ----> String-Datentyp
  2. 122 --->  Integer-Datentyp
  3. "sudo,developers" --->String-Datentyp
  4. "bash" ---> String-Datentyp

Es ist also völlig in Ordnung, verschiedene Datentypen im selben Array zu speichern. Ist das nicht toll?

Dies bringt uns zum Ende dieses Tutorials; Ich hoffe, dass es Ihnen gefallen hat! Wenn Sie etwas komplizierteres und reales Beispiel wollen, sehen Sie sich an, wie man Strings in Bash mit Arrays aufteilt.

Und natürlich können Sie das, was Sie gerade gelernt haben, üben, indem Sie die Probleme lösen und auf die Lösungen zurückgreifen, wenn Sie nicht weiterkommen oder einen Hinweis benötigen.

Bash Kapitel 4 ÜbungsfragenProbleme und ihre Lösung zum Üben von Bash-ArraysBash-Kapitel-4-Übungsfragen-Linux-Handbuch.pdf29 KB

Im nächsten Kapitel werde ich Ihnen zeigen, wie Sie verschiedene Bash-Arithmetikoperatoren verwenden.

Wird geladen...
Linux
  1. Verwenden einer Referenz auf eine Bash-String-Variable in Sed?

  2. Bash-Anfängerserie Nr. 9:Verwenden von Funktionen in Bash

  3. Bash-Anfängerserie Nr. 8:Schleifen in Bash

  4. Array in Bash nicht gefunden

  5. Verhalten von Arrays in Bash-Scripting und ZSH-Shell (Startindex 0 oder 1?)

Bash-Anfängerserie Nr. 1:Erstellen Sie Ihr erstes Bash-Shell-Skript und führen Sie es aus

Bash-Anfängerserie Nr. 5:Verwenden von arithmetischen Operatoren in Bash-Skripten

Bash-Anfängerserie Nr. 3:Übergabe von Argumenten an Bash-Skripte

Bash-Anfängerserie Nr. 7:Entscheidungsfindung mit If Else- und Case-Anweisungen

Bash-Anfängerserie Nr. 6:Zeichenfolgenoperationen in Bash

Bash-Anfängerserie Nr. 10:Automatisierung mit Bash