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

Das ultimative Bash-Array-Tutorial mit 15 Beispielen

Ein Array ist eine Variable, die mehrere Werte enthält, die vom gleichen Typ oder von unterschiedlichem Typ sein können. Es gibt keine Obergrenze für die Größe eines Arrays und auch keine Anforderung, dass Member-Variablen indiziert oder zusammenhängend zugewiesen werden müssen. Array-Index beginnt mit Null.

Lassen Sie uns in diesem Artikel 15 verschiedene Array-Operationen in Bash besprechen.

Dieser Artikel ist Teil der fortlaufenden Bash-Tutorial-Reihe. Für diejenigen, die neu in der Bash-Skripterstellung sind, erhalten Sie eine Starthilfe aus dem Tutorial zur Einführung in die Bash-Skripterstellung.

1. Ein Array deklarieren und Werte zuweisen

In Bash wird ein Array automatisch erstellt, wenn eine Variable im Format wie

verwendet wird
name[index]=value
  • name ist ein beliebiger Name für ein Array
  • Index kann eine beliebige Zahl oder ein beliebiger Ausdruck sein, der zu einer Zahl größer oder gleich Null ausgewertet werden muss. Sie können ein explizites Array mit der Deklaration -a Arrayname deklarieren.
$ cat arraymanip.sh
#! /bin/bash
Unix[0]='Debian'
Unix[1]='Red hat'
Unix[2]='Ubuntu'
Unix[3]='Suse'

echo ${Unix[1]}

$./arraymanip.sh
Red hat

Um auf ein Element aus einem Array zuzugreifen, verwenden Sie geschweifte Klammern wie ${name[index]}.

2. Initialisieren eines Arrays während der Deklaration

Anstatt jedes Element eines Arrays separat zu initialisieren, können Sie ein Array deklarieren und initialisieren, indem Sie die Liste der Elemente (durch Leerzeichen getrennt) in geschweiften Klammern angeben.

Syntax:
declare -a arrayname=(element1 element2 element3)

Wenn das Element Leerzeichen enthält, schließen Sie es in Anführungszeichen ein.

#! /bin/bash
$cat arraymanip.sh
declare -a Unix=('Debian' 'Red hat' 'Red hat' 'Suse' 'Fedora');

deklarieren -a deklariert ein Array und alle Elemente in den Klammern sind die Elemente eines Arrays.

3. Drucken Sie das gesamte Bash-Array

Es gibt verschiedene Möglichkeiten, die gesamten Elemente des Arrays zu drucken. Wenn die Indexnummer @ oder * ist, wird auf alle Mitglieder eines Arrays verwiesen. Sie können die Array-Elemente durchlaufen und ausdrucken, indem Sie Schleifenanweisungen in Bash verwenden.

echo ${Unix[@]}

# Add the above echo statement into the arraymanip.sh
#./t.sh
Debian Red hat Ubuntu Suse

Der Verweis auf den Inhalt einer Member-Variablen eines Arrays ohne Angabe einer Indexnummer entspricht dem Verweis auf den Inhalt des ersten Elements, das mit der Indexnummer Null referenziert wird.

4. Länge des Bash-Arrays

Wir können die Länge eines Arrays mit dem speziellen Parameter namens $#.

ermitteln

${#arrayname[@]} gibt Ihnen die Länge des Arrays.

$ cat arraymanip.sh
declare -a Unix=('Debian' 'Red hat' 'Suse' 'Fedora');
echo ${#Unix[@]} #Number of elements in the array
echo ${#Unix}  #Number of characters in the first element of the array.i.e Debian
$./arraymanip.sh
4
6

5. Länge des n-ten Elements in einem Array

${#arrayname[n]} sollte die Länge des n-ten Elements in einem Array angeben.

$cat arraymanip.sh
#! /bin/bash

Unix[0]='Debian'
Unix[1]='Red hat'
Unix[2]='Ubuntu'
Unix[3]='Suse'

echo ${#Unix[3]} # length of the element located at index 3 i.e Suse

$./arraymanip.sh
4

6. Extraktion nach Offset und Länge für ein Array

Das folgende Beispiel zeigt, wie 2 Elemente beginnend bei Position 3 aus einem Array namens Unix extrahiert werden.

$cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[@]:3:2}

$./arraymanip.sh
Suse Fedora

Das obige Beispiel gibt die Elemente im 3. und vierten Index zurück. Index beginnt immer mit Null.

7. Extraktion mit Offset und Länge für ein bestimmtes Element eines Arrays

Um nur die ersten vier Elemente aus einem Array-Element zu extrahieren. Zum Beispiel Ubuntu, das sich am zweiten Index eines Arrays befindet, Sie können Offset und Länge für ein bestimmtes Element eines Arrays verwenden.

$cat arraymanip.sh
#! /bin/bash

Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[2]:0:4}

./arraymanip.sh
Ubun

Das obige Beispiel extrahiert die ersten vier Zeichen aus dem zweiten indizierten Element eines Arrays.

8. Suchen und Ersetzen in einem Array von Elementen

Das folgende Beispiel sucht nach Ubuntu in einem Array-Element und ersetzt dasselbe durch das Wort „SCO Unix“.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');

echo ${Unix[@]/Ubuntu/SCO Unix}

$./arraymanip.sh
Debian Red hat SCO Unix Suse Fedora UTS OpenLinux

In diesem Beispiel ersetzt es das Element im 2. Index „Ubuntu“ durch „SCO Unix“. Aber dieses Beispiel wird den Inhalt des Arrays nicht dauerhaft ersetzen.

9. Ein Element zu einem bestehenden Bash-Array hinzufügen

Das folgende Beispiel zeigt, wie ein Element zu einem bestehenden Array hinzugefügt wird.

$cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Unix=("${Unix[@]}" "AIX" "HP-UX")
echo ${Unix[7]}

$./arraymanip.sh
AIX

In dem Array namens Unix werden die Elemente „AIX“ und „HP-UX“ im 7. bzw. 8. Index hinzugefügt.

10. Ein Element aus einem Array entfernen

unset wird verwendet, um ein Element aus einem Array zu entfernen. unset hat denselben Effekt wie die Zuweisung von null zu einem Element.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');

unset Unix[3]
echo ${Unix[3]}

Das obige Skript gibt nur null aus, was der im dritten Index verfügbare Wert ist. Das folgende Beispiel zeigt eine Möglichkeit, ein Element vollständig aus einem Array zu entfernen.

$ cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
pos=3
Unix=(${Unix[@]:0:$pos} ${Unix[@]:$(($pos + 1))})
echo ${Unix[@]}

$./arraymanip.sh
Debian Red hat Ubuntu Fedora UTS OpenLinux

In diesem Beispiel gibt ${Unix[@]:0:$pos} Ihnen 3 Elemente, beginnend mit dem 0. Index, dh 0,1,2, und ${Unix[@]:4} gibt die Elemente vom 4. Index bis zum letzter Index. Und führen Sie die beiden obigen Ausgaben zusammen. Dies ist eine der Problemumgehungen, um ein Element aus einem Array zu entfernen.

11. Entfernen Sie Bash-Array-Elemente mithilfe von Mustern

In der Suchbedingung können Sie die Muster angeben und das verbleibende Element wie unten gezeigt in einem anderen Array speichern.

$ cat arraymanip.sh
#!/bin/bash
declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora');
declare -a patter=( ${Unix[@]/Red*/} )
echo ${patter[@]}

$ ./arraymanip.sh
Debian Ubuntu Suse Fedora

Das obige Beispiel entfernt die Elemente mit dem Muster Rot*.

12. Kopieren eines Arrays

Erweitern Sie die Array-Elemente und speichern Sie diese wie unten gezeigt in einem neuen Array.

#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Linux=("${Unix[@]}")
echo ${Linux[@]}

$ ./arraymanip.sh
Debian Red hat Ubuntu Fedora UTS OpenLinux

13. Verkettung zweier Bash-Arrays

Erweitern Sie die Elemente der beiden Arrays und weisen Sie sie dem neuen Array zu.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');

UnixShell=("${Unix[@]}" "${Shell[@]}")
echo ${UnixShell[@]}
echo ${#UnixShell[@]}

$ ./arraymanip.sh
Debian Red hat Ubuntu Suse Fedora UTS OpenLinux bash csh jsh rsh ksh rc tcsh
14

Es gibt das Array aus, das die Elemente des Arrays „Unix“ und „Shell“ enthält, und die Anzahl der Elemente des neuen Arrays beträgt 14.

14. Löschen eines gesamten Arrays

unset wird verwendet, um ein ganzes Array zu löschen.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');

UnixShell=("${Unix[@]}" "${Shell[@]}")
unset UnixShell
echo ${#UnixShell[@]}

$ ./arraymanip.sh
0

Nachdem ein Array zurückgesetzt wurde, wäre seine Länge Null, wie oben gezeigt.

15. Inhalt einer Datei in ein Array laden

Sie können den Inhalt der Datei Zeile für Zeile in ein Array laden.

#Example file
$ cat logfile
Welcome
to
thegeekstuff
Linux
Unix

$ cat loadcontent.sh
#!/bin/bash
filecontent=( `cat "logfile" `)

for t in "${filecontent[@]}"
do
echo $t
done
echo "Read file content!"

$ ./loadcontent.sh
Welcome
to
thegeekstuff
Linux
Unix
Read file content!

Im obigen Beispiel hat jeder Index eines Array-Elements eine For-Schleife durchlaufen.

Empfohlene Lektüre

Bash 101 Hacks, von Ramesh Natarajan . Ich verbringe die meiste Zeit in der Linux-Umgebung. Daher bin ich natürlich ein großer Fan von Bash-Befehlszeilen- und Shell-Skripten. Vor 15 Jahren, als ich an verschiedenen Varianten von *nix arbeitete, habe ich viel Code auf der C-Shell und der Korn-Shell geschrieben. Später, als ich anfing, als Systemadministrator an Linux zu arbeiten, automatisierte ich so ziemlich jede mögliche Aufgabe mit Bash-Shell-Scripting. Basierend auf meiner Bash-Erfahrung habe ich das eBook „Bash 101 Hacks“ geschrieben, das 101 praktische Beispiele sowohl für die Bash-Befehlszeile als auch für Shell-Scripting enthält. Wenn Sie darüber nachgedacht haben, Bash zu beherrschen, tun Sie sich selbst einen Gefallen und lesen Sie dieses Buch, das Ihnen helfen wird, die Kontrolle über Ihre Bash-Befehlszeile und Ihr Shell-Skripting zu übernehmen.


Linux
  1. Das Numfmt-Befehls-Tutorial mit Beispielen für Anfänger

  2. Das Type Command Tutorial mit Beispielen für Anfänger

  3. Das Shuf-Befehls-Tutorial mit Beispielen für Anfänger

  4. Bash-Arrays mit Beispielen

  5. '&&' vs. '&' mit dem 'test'-Befehl in Bash

Bash-Scripting – Assoziatives Array mit Beispielen erklärt

Bash-Scripting – Indiziertes Array mit Beispielen erklärt

Der ultimative Wget-Download-Leitfaden mit 15 fantastischen Beispielen

Das ultimative Tar Command Tutorial mit 10 praktischen Beispielen

Tutorial zu Bash-Shell-Funktionen mit 6 praktischen Beispielen

HowTo:Das ultimative Logrotate-Befehls-Tutorial mit 10 Beispielen