9 Beispiele für for-Schleifen in Linux-Bash-Skripten

Veröffentlicht: 2022-08-19
Linux-Befehlszeile auf einem Laptop auf blauem Hintergrund.
fatmawati achmad zaenuri/Shutterstock.com

Die vielseitige Bash- for -Schleife kann viel mehr als nur eine bestimmte Anzahl von Schleifen durchlaufen. Wir beschreiben seine vielen Varianten, damit Sie sie erfolgreich in Ihren eigenen Linux-Skripten verwenden können.

Die for-Schleife

Alle Skript- und Programmiersprachen haben eine Möglichkeit, mit Schleifen umzugehen. Eine Schleife ist ein Codeabschnitt, der wiederholt ausgeführt werden soll. Anstatt immer wieder dieselben Anweisungen in Ihr Skript einzugeben, wiederholt eine Schleife einen Codeabschnitt immer und immer wieder für Sie.

9 Bash-Skriptbeispiele für den Einstieg in Linux
ZUGEHÖRIGE 9 Bash-Skriptbeispiele für den Einstieg in Linux

Die Bash- for -Schleife ist sehr flexibel. Es kann mit Zahlen, Wörtern, Arrays, Befehlszeilenvariablen oder der Ausgabe anderer Befehle arbeiten. Diese werden im Header der Schleife verwendet. Der Header gibt vor, womit die Schleife arbeitet – zum Beispiel Zahlen oder Zeichenketten – und was die Endbedingung ist, die die Schleife stoppt.

Der Körper der Schleife enthält den Code, den Sie wiederholen möchten. Es enthält, was die Schleife tun soll. Der Schleifenkörper kann jeden gültigen Skriptbefehl enthalten.

Eine Variable namens Schleifenzähler oder Iterator wird verwendet, um einen Wertebereich oder eine Liste von Datenelementen schrittweise zu durchlaufen. Für jede Schleife nimmt der Iterator den Wert der nächsten Zahl, Zeichenfolge oder des Datentyps an, über den die Schleife iteriert. Dadurch kann die Schleife der Reihe nach mit den Werten der einzelnen Datenelemente arbeiten oder in einigen Fällen sogar die Datenelemente selbst manipulieren.

Einfach für Schleifen

Wenn Sie Ihre erste for-Schleife schreiben möchten, werden Ihnen diese einfachen Beispiele den Einstieg erleichtern.

für Schleifen mit numerischen Listen

Sie können eine for -Schleife auf der Befehlszeile ausführen. Dieser Befehl erstellt und führt eine einfache for -Schleife aus. Der Iterator ist eine Variable namens i . Wir werden i der Reihe nach jedem der Werte in der Liste der Zahlen zuweisen. Der Körper der Schleife gibt diesen Wert im Terminalfenster aus. Die Bedingung, die diese Schleife beendet, ist, wenn i über die gesamte Zahlenliste iteriert hat.

 für i in 1 2 3 4 5; do echo $i; erledigt 

eine For-Schleife, die von 1 bis 5 zählt

Es ist wichtig zu beachten, dass die Variable i jedes Mal um eins erhöht wird, wenn sich die Schleife dreht, aber das liegt daran, dass die Liste der Zahlen jedes Mal um eins erhöht wird.

Diese Zahlenliste beginnt bei 3 und geht in Zweierschritten nach oben, springt dann willkürlich bis 44.

 für i in 3 5 7 9 11 44; do echo $i; erledigt 

eine for-Schleife, die durch eine nicht sequentielle Liste von Zahlen zählt

Es macht keinen Unterschied zur for -Schleife. Es beginnt an einem Ende der Liste und verwendet nacheinander jeden Wert, bis alle Werte in der Liste verwendet wurden.

Die Nummern müssen auch nicht aufsteigend sein. Sie können in beliebiger Reihenfolge sein.

 für i in 3 43 44 11 9; do echo $i; erledigt 

eine for-Schleife, die durch eine unsortierte Liste von Zahlen zählt

für Schleifen mit Wortlisten

Genauso können wir das auch mit Worten tun. Kopieren Sie den Text des Skripts in einen Editor und speichern Sie ihn als „word-list.sh“.

 #!/bin/bash

for word in Dies ist eine Folge von Wörtern
tun 
  echo $wort
erledigt

Sie müssen chmod verwenden, um das Skript ausführbar zu machen, sowie jedes andere Skript, das Sie aus diesem Artikel kopieren. Ersetzen Sie einfach den Namen des Skripts jedes Mal, wenn Sie den Befehl chmod verwenden.

 chmod +x Wortliste.sh 

Mit chmod ein Skript ausführbar machen

Lassen Sie uns das Skript ausführen.

 ./Wortliste.sh 

Eine for-Schleife, die eine Liste von Wörtern durchgeht

Genau wie bei den Zahlen arbeitet sich der Iterator – in diesem Beispiel die Variable word – durch die Liste der Datenelemente, bis er das Ende der Liste erreicht. Der Schleifenkörper greift auf den Wert in der word zu und so wird jedes Wort in der Liste verarbeitet.

für Schleifen mit Nummernkreisen

Wenn Sie möchten, dass eine for -Schleife 100 Mal ausgeführt wird, wäre es eine ziemlich lästige Angelegenheit, eine Folge von 100 Zahlen in den Schleifenkopf eingeben zu müssen. Bei Nummernkreisen können Sie nur die erste und letzte Nummer angeben.

Dieses Skript ist „number-range.sh“.

 #!/bin/bash

für i in {1..10}
tun
  echo "Schleife drehen:" $i
erledigt

Der Zahlenbereich wird in geschweiften Klammern „ {} “ mit zwei Punkten „ .. “ definiert, die die Zahlen trennen, die den Bereich beginnen und beenden. Stellen Sie sicher, dass Sie keine Leerzeichen in die Bereichsdefinition aufnehmen.

So läuft es ab:

 ./Nummernbereich.sh 

Eine for-Schleife mit einem Zahlenbereich

Sie können eine weitere Zahl einfügen, die die Schrittgröße definiert, die der Iterator verwenden soll, um die Zahlen im Bereich zu durchlaufen. Dieses Skript „number-range2.sh“ verwendet einen Bereich von 0 bis 32 und eine Schrittgröße von 4.

 #!/bin/bash

für i in {0..32..4}
tun
  echo "Schleife drehen:" $i
erledigt

Der Iterator durchläuft den Zahlenbereich in Vierersprüngen.

 ./Nummernkreis2.sh 

Eine for-Schleife mit einem Iteratorschritt von 4

für Schleifen mit Dateinamen

Da wir Wortlisten verarbeiten können, können wir unsere Skripte dazu bringen, mit Dateinamen zu arbeiten. Dieses Skript heißt „filenames.sh“.

 #!/bin/bash

für Datei in Wortliste.sh Nummernbereich.sh Nummernbereich2.sh Dateinamen.sh
tun
  ls -lh "$Datei"
erledigt

Es wäre ziemlich sinnlos, ein Skript zu haben, das nur das tut, was ls kann, aber es demonstriert, wie man auf Dateinamen innerhalb des Schleifenkörpers zugreift.

 ./Dateinamen.sh 

Eine for-Schleife mit einer Liste von Dateinamen

Ähnlich wie bei der Verwendung des Zahlenbereichs können wir ein Dateimuster im Schleifenkopf verwenden, um die Dateien anzugeben, die wir verarbeiten möchten. Dies erspart viel Tipparbeit und bedeutet, dass wir die Namen der Dateien nicht im Voraus wissen müssen.

Dieses Skript heißt „filenames2.sh“. Wir haben die Liste der Dateinamen durch das Dateinamenmuster „*.sh“ ersetzt, damit das Skript alle Skriptdateien im aktuellen Verzeichnis anzeigt.

 #!/bin/bash

für Datei in *.sh
tun
  ls -lh "$Datei"
erledigt

Hier ist die Ausgabe.

 ./Dateinamen2.sh 

Eine for-Schleife mit einem Dateimuster von *.sh

für Schleifen mit Befehlszeilenparametern

Wir können etwas mehr Flexibilität hinzufügen, indem wir das Dateinamenmuster auf der Befehlszeile übergeben. Die Variable $* repräsentiert alle Befehlszeilenparameter, die an das Skript übergeben werden.

Dies ist „Dateiname3.sh“.

 #!/bin/bash

für Datei in $*
tun
  ls -lh "$Datei"
erledigt

Wir fragen nach Dateinamen, die mit „n“ beginnen und eine SH-Erweiterung haben.

 ./filenames3.sh n*.sh 

Eine for-Schleife, die ein Dateimuster als Befehlszeilenparameter verwendet

Wir können auch mehr als ein Muster gleichzeitig übergeben.

 ./filenames3.sh n*.sh .bashrc 

Eine for-Schleife, die ein Dateimuster und die Befehlszeilenparameter eines Dateinamens verwendet

Die Iterator file nimmt den Wert jedes Befehlszeilenparameters an. Dateinamenmuster werden erweitert, und alle Dateinamen werden im Schleifenkörper verarbeitet.

VERWANDT: So arbeiten Sie mit Variablen in Bash

C-ähnlich für Loops

Bash unterstützt die klassische For-Schleife mit drei Begriffen, wie sie in der Programmiersprache C zu finden ist. Sie werden for-Schleifen mit drei Begriffen genannt, weil der Schleifenkopf drei Begriffe enthält.

  • Der Anfangswert des Schleifeniterators.
  • Der Test, ob die Schleife fortgesetzt oder beendet wird.
  • Das Inkrementieren – oder Dekrementieren – des Iterators.

Dieses Skript ist „c-like.sh“.

Der Iterator I wird am Anfang der Schleife auf 1 gesetzt und die Schleife läuft so lange, wie die Aussage „ i<=10 “ wahr ist. Sobald i 11 erreicht, stoppt die for -Schleife. Der Iterator wird bei jeder Umdrehung der Schleife um eins erhöht.

 #!/bin/bash

für (( i=1; i<=10; i++ ))
tun 
  echo "Schleifennummer:" $i
erledigt

Lassen Sie uns dieses Skript ausführen.

 ./c-like.sh 

Eine dreigliedrige oder C-ähnliche for-Schleife

Die C-ähnliche for -Schleife ermöglicht die einfache Erstellung von for -Schleifen mit etwas ungewöhnlichen Anforderungen. Diese Schleife beginnt bei 15 und zählt in 3er-Schritten rückwärts. Dies ist „c-like2.sh“.

 #!/bin/bash

für (( i=15; i>0; i-=3 ))
tun 
  echo "Schleifennummer:" $i
erledigt

Wenn wir es ausführen, sollte es in Dreierschritten rückwärts springen.

 ./c-like2.sh 

Eine C-ähnliche for-Schleife, die rückwärts zählt

Unendlich für Schleifen

Sie können dieses Format der for -Schleife auch verwenden, um eine Endlosschleife zu erstellen. Alles, was Sie tun müssen, ist, alle Elemente aus dem Loop-Header zu entfernen, wie hier. Dies ist „infinite.sh“.

 #!/bin/bash

zum (( ; ; ))
tun
  echo "Drücke Strg+C um zu stoppen..."
  schlafen 1
erledigt

Sie müssen Strg + C drücken, um die Schleife zu stoppen.

 ./unendlich.sh 

Eine unendliche C-ähnliche For-Schleife

for-Schleifen mit Word-Arrays

Wir können leicht durch eine Reihe von Wörtern iterieren. Wir müssen den Namen des Arrays im Loop-Header angeben, und der Iterator durchläuft alle Einträge im Array. Dies ist „word-array.sh“.

 #!/bin/bash

Distributionen=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")

für die Distribution in $distributions
tun
  echo $distro
erledigt

Alle Distributionen sind für uns aufgelistet.

 ./word-array.sh 

Eine for-Schleife mit einem Wortarray

Der Continue-Befehl

Wenn Sie möchten, dass die Schleife einen bestimmten Eintrag überspringt, testen Sie, ob der Iterator mit diesem Eintrag übereinstimmt, und verwenden Sie den Befehl continue . Der continue -Befehl verwirft den aktuellen Durchlauf der Schleife. Es inkrementiert den Iterator und startet den nächsten Durchlauf der Schleife – vorausgesetzt, der Eintrag, den Sie überspringen möchten, ist nicht das letzte Element in der Liste.

Dies ist „word-array2.sh“. Es überspringt den Array-Eintrag „Arch“, verarbeitet aber alle anderen Array-Mitglieder.

 #!/bin/bash

Distributionen=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")

für die Distribution in $distributions
tun
  if [[ "$distro" == "Arch" ]] ;
    dann
    fortsetzen
  fi
  echo $distro
erledigt

„Arch“ erscheint nicht im Terminalfenster.

 ./word-array2.sh 

Eine for-Schleife, die einen Eintrag in einem Wortarray aufgrund des Continue-Befehls überspringt

Der Break-Befehl

Der break -Befehl bricht aus der Schleife aus und verhindert eine weitere Verarbeitung.

Dies ist „word-array3.sh“. Es ist dasselbe wie im vorherigen Skript, wobei continue durch break ersetzt wurde.

 #!/bin/bash

Distributionen=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")

für die Distribution in $distributions
tun
  if [[ "$distro" == "Arch" ]] ;
    dann
    Unterbrechung
  fi
  echo $distro
erledigt

Wenn der Iterator „Arch“ enthält, bricht die for-Schleife jede weitere Verarbeitung ab.

 ./word-array3.sh 

Eine for-Schleife, die die weitere Verarbeitung wegen des Break-Befehls abbricht

für Schleifen mit assoziativen Arrays

In Bash 4 und höher können Sie mit assoziativen Arrays Listen von Schlüssel-Wert-Paaren erstellen, die nach Schlüssel oder Wert durchsucht werden können. Aufgrund der wechselseitigen Beziehung zwischen dem Schlüssel und dem Wert werden sie auch Datenwörterbücher genannt.

Was sind Bash-Wörterbücher unter Linux und wie verwenden Sie sie?
RELATED Was sind Bash-Wörterbücher unter Linux und wie verwenden Sie sie?

Wir können ein assoziatives Array mit einer for -Schleife durchlaufen. Dieses Skript ist „assoziative.sh“. Es definiert ein assoziatives Array mit vier Einträgen, jeweils einen für „Hund“, „Katze“, „Rotkehlchen“ und „Mensch“. Das sind die Schlüssel. Die Werte sind die (Standard-)Anzahl von Beinen, die sie haben.

 #!/bin/bash

deklarieren -A Tiere=( [Hund]=Vierbeinig [Katze]=Vierbeinig [Rotkehlchen]=Zweibeinig [Mensch]=Zweibeinig )

für Beine in ${!animals[@]}
tun
  if [ ${animals[$legs]} == "Zweibeinig" ]; dann 
    echo ${beine}
  fi
erledigt

Der Iterator heißt legs . Beachten Sie, dass der Loop-Header ein „ ! " Ausrufezeichen. Dies fungiert nicht als logischer NOT-Operator, sondern ist Teil der assoziativen Array-Syntax. Es ist erforderlich, das Array zu durchsuchen.

Der Körper der Schleife führt einen String-Vergleichstest durch. Wenn der Wert des Array-Mitglieds „Zweibeinig“ ist, gibt es den Schlüsselwert im Terminalfenster aus. Wenn wir es ausführen, druckt das Skript die zweibeinigen Kreaturen.

 ./assoziativ.sh 

Verwenden einer for-Schleife zum Extrahieren von Elementen aus einem assoziativen Array

Iteration über die Ausgabe von Befehlen

Wenn Sie einen Befehl oder eine Folge von Befehlen haben, die eine Liste von etwas erzeugen, z. B. Dateinamen, können Sie sie mit einer for -Schleife durchlaufen. Sie müssen auf unerwartete Dateinamenerweiterungen achten, aber in einfachen Fällen ist es in Ordnung.

Dieses Skript ist „command.sh“. Es verwendet ls und wc , um eine sortierte Liste von Skriptdateinamen zusammen mit ihrer Zeilen-, Wort- und Byteanzahl bereitzustellen.

 #!/bin/bash

für i in $(ls *.sh | sort);
tun 
  echo $(wc $i)
erledigt

Wenn wir es ausführen, erhalten wir die Statistiken für jede Datei, wobei die Dateien in alphabetischer Reihenfolge aufgelistet sind.

 ./command.sh 

Verwenden einer for-Schleife zum Iterieren über die Ausgabe von zwei Pipe-Befehlen

Das Dazzling for Loop

Die for -Schleife ist ein vielseitiges und leicht verständliches Skriptwerkzeug. Aber so flexibel es auch ist, vergessen Sie nicht, dass andere Schleifen aus einem bestimmten Grund existieren. Lassen Sie sich nicht davon blenden, dass die for -Schleife alles ist, was Sie jemals brauchen werden.

So verarbeiten Sie eine Datei Zeile für Zeile in einem Linux-Bash-Skript
VERWANDTE So verarbeiten Sie eine Datei Zeile für Zeile in einem Linux-Bash-Skript

Die while -Schleife beispielsweise ist für bestimmte Dinge viel besser geeignet als die for -Schleife, etwa um Zeilen aus einer Datei zu lesen.

Gute Drehbücher zu schreiben bedeutet, das am besten geeignete Werkzeug für die jeweilige Aufgabe zu verwenden. Die for -Schleife ist ein großartiges Werkzeug, das Sie in Ihrer Trickkiste haben sollten.