Arbeiten mit Arrays in Linux -Shell -Skripting - Teil 8
- 4355
- 933
- Henry Liebold
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 -SkriptingDa 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.
- « Linux-Dash-Monitore „Linux-Serverleistung“ mit dem Webbrowser aus der Ferne remote
- GNOME Commander A 'Two Panel' Grafischer Dateibrowser und Manager für Linux »