Arbeiten mit Arrays in Linux -Shell -Skripting - Teil 8

Arbeiten mit Arrays in Linux -Shell -Skripting - Teil 8

Wir können uns eine Programmiersprache ohne das Konzept der Arrays nicht vorstellen. Es spielt keine Rolle, wie sie in verschiedenen Sprachen implementiert werden. Stattdessen helfen uns Arrays bei der Konsolidierung von ähnlichen oder unterschiedlichen Daten unter einem symbolischen Namen.

Arbeiten mit Arrays im Shell -Skripting

Da wir uns über Shell Scripting besorgt haben, hilft Ihnen dieser Artikel beim Spielen mit einigen Shell -Skripten, die dieses Konzept von Arrays verwenden.

Array -Initialisierung und -verwendung

Mit neueren Versionen von Bash unterstützt es eindimensionale Arrays. Ein Array kann explizit von der deklariert werden erklären Muschelgebau.

Declare -a var 

Es ist jedoch nicht erforderlich, Array -Variablen wie oben zu deklarieren. Wir können einzelne Elemente in das Array direkt wie folgt einfügen.

var [xx] = 

wobei 'xx' den Array -Index bezeichnet. Zu Dereferenzarray -Elementen Verwenden Sie die Curly Bracket -Syntax, ich.e.

$ var [xx] 

Notiz: Array -Indexierung beginnt immer mit 0.

Eine weitere bequeme Möglichkeit zur Initialisierung eines gesamten Arrays besteht darin, das unten gezeigte Klammernpaar zu verwenden.

var = (Element1 Element2 Element3… Elementn) 

Es gibt noch eine andere Möglichkeit, Arrays Werte zuzuweisen. Diese Initialisierung ist eine Unterkategorie der zuvor erklärten Methode.

Array = ([xx] = [xx] =…) 

Wir können während der Ausführungszeit auch die Werte lesen/zuweisen und mit der Ausführungszeit das Array zuweisen lesen Muschelgebau.

Lesen Sie -a Array 

Nachdem Sie die obige Anweisung in einem Skript ausgeführt haben, wartet sie auf einige Eingaben. Wir müssen die durch den Raum getrennten Array -Elemente bereitstellen (und nicht die Kutschenrendite). Nach dem Eingeben der Werte drücken Sie die Eingabetaste, um sie zu beenden.

Um die Array -Elemente zu durchqueren, können wir auch für die Schleife verwenden.

für i in "$ Array [@]" machen Sie jedes Element als $ i… fertig 

Das folgende Skript fasst den Inhalt dieses bestimmten Abschnitts zusammen.

#!/bin/bash array1 [0] = ein Array1 [1] = 1 Echo $ Array1 [0] Echo $ Array1 [1] Array2 = (eins drei) Echo $ Array2 [0] echo $  Array2 [2] Array3 = ([9] = neun [11] = 11) Echo $ array3 [9] echo $ array3 [11] read -a array4 für i in "$ array4 [@] "Echo $ Ich habe beendet 0 

Verschiedene Operationen auf Arrays

Viele der Standard -String -Operationen arbeiten an Arrays . Sehen Sie sich das folgende Beispielskript an, das einige Operationen auf Arrays implementiert (einschließlich String -Operationen).

#!/bin/bash array = (Apple Bat Cat Dog Elephant Frog) #print Erstes Element Echo $ Array [0] Echo $ Array: 0 #Display Alle Elemente Echo $ Array [@] Echo $ Array [ @]: 0 #Display Alle Elemente außer dem ersten Echo $ Array [@]: 1 #Display -Elemente in einem Bereich Echo $ Array [@]: 1: 4 #Length von First Element Echo $  #Array [0] Echo $ #Array #Number of Elements Echo $ #Array [*] Echo $ #Array [@] #Replacing substring echo $ Array [@] // a/a exit 0 

Im Folgenden finden Sie die Ausgabe, die zum Ausführen des obigen Skripts erstellt wurde.

Apfel Apfel Apfel Bat Cat Hunde Elefant Frosch Apfel Bat Katze Hunde Elefant Frosch Bat Katze Hunde Elefant Frosch Fledermaus Katzenhund Elefant 5 5 6 6 Apfel Bat Cat Hund Elephant Frosch 

Ich denke. Bei Bedarf werde ich einen Teil in dieser Serie ausschließlich auf String -Manipulationen widmen.

Befehlssubstitution durch Arrays

Die Befehlsubstitution weist die Ausgabe eines Befehls oder mehrere Befehle in einen anderen Kontext zu. Hier in diesem Zusammenhang von Arrays können wir die Ausgabe von Befehlen als einzelne Elemente von Arrays einfügen. Syntax ist wie folgt.

Array = ($ (Befehl)) 

Standardmäßig werden die durch weißen Räume getrennten Inhalt in der Ausgabe des Befehls als einzelne Elemente an das Array angeschlossen. Das folgende Skript listet den Inhalt eines Verzeichnisses auf, nämlich Dateien mit 755 Berechtigungen.

#!/bin/bash err = 27 ext = 0 if [$# -ne 1]; dann echo "nutzung: $ 0" beenden $ err fi if [ ! -d $ 1]; dann echo "Verzeichnis $ 1 existiert nicht" beenden $ err fi temp = ($ (finde $ 1 -MaxDepth 1 -Typ f)) für i in "$ temp [@]" do Perm = $ (ls -l $ i) if ['expr $ perm: 0: 10: "-rwxr-xr-x"' -eq 10]; dann echo $ i ##*/ fi fat Done beenden $ ext 

Simulation von zweidimensionalen Arrays

Wir können leicht eine zweidimensionale Matrix mit einem 1-dimensionalen Array darstellen. In Reihen -Hauptauftrag Darstellungselemente in jeder Zeile einer Matrix werden aufeinanderfolgende in Array -Indizes schrittweise gespeichert. Für eine MXN -Matrix kann die Formel für dasselbe geschrieben werden als.

matrix [i] [j] = array [n*i+j] 

Schauen Sie sich ein anderes Beispielskript an, um 2 Matrizen hinzuzufügen und die resultierende Matrix zu drucken.

#!/bin/bash read -p "Geben Sie die Matrix -Reihenfolge ein [mxn]:" t m = $ t: 0: 1 n = $ t: 2: 1 echo "Geben Sie die Elemente für die erste Matrix ein" für i in 'in' in ' SEQ 0 $ (($ M-1)) 'DO für J in' SEQ 0 $ (($ n-1)) 'Lesen Sie x [$ ($ n*$ i+$ j)] erledigt Echo erledigt " Geben Sie die Elemente für die zweite Matrix "für i in 'SEQ 0 $ (($ M-1))' für J in 'SEQ 0 $ (($ n-1))' Lesen y [$ (($ n* $ i+$ j)]] z [$ (($ n*$ i+$ j))] = $ (($ x [$ ($ n*$ i+$ j))]+$ y [$ (($ n*$ i+$ j)))) erledigte Echo "Matrix nach Addition ist" für i in 'SEQ 0 $ (($ M-1))' DO für J in 'seq 0 $ ((((((( $ n -1)) 'do echo -ne "$ z [$ (($ n*$ i+$ j))] \ t" erledigte echo -e "\ n" Done Beende 0 

Auch wenn es Einschränkungen für die Implementierung von Arrays im Shell -Skripting gibt, wird es in einer Handvoll Situationen nützlich, insbesondere wenn wir mit Befehlssubstitution umgehen. Mit Blick auf administrative Sicht ebnete das Konzept der Arrays den Weg für die Entwicklung vieler Hintergrundskripte in GNU/Linux -Systemen.