Einführung
Der for
Schleife ist eine wesentliche Programmierfunktionalität, die eine Liste von Elementen durchläuft. Für jedes dieser Elemente wird for
Schleife führt eine Reihe von Befehlen aus. Der Befehl hilft dabei, Prozesse bis zu einer Abbruchbedingung zu wiederholen.
Egal, ob Sie eine Reihe von Zahlen durchgehen oder Dateien umbenennen, for
Schleifen in Bash-Skripten bieten eine bequeme Möglichkeit, Elemente automatisch aufzulisten.
Dieses Tutorial zeigt, wie man Bash for
verwendet Schleifen in Skripten.
Voraussetzungen
- Zugriff auf das Terminal/Befehlszeile (CTRL +ALT +T ).
- Ein Texteditor wie Nano oder Vi/Vim.
- Grundlegende Programmierterminologie.
Bash-Skript für Schleife
Verwenden Sie die for
Schleife, um eine Liste von Elementen zu durchlaufen, um die angewiesenen Befehle auszuführen.
Die grundlegende Syntax für for
Schleife in Bash-Skripten ist:
for <element> in <list>
do
<commands>
done
Das Element, die Liste und die Befehle, die durch die Schleife geparst werden, variieren je nach Anwendungsfall.
Beispiele für Bash-For-Schleifen
Nachfolgend finden Sie verschiedene Beispiele für for
Schleife in Bash-Skripten. Erstellen Sie ein Skript, fügen Sie den Code hinzu und führen Sie die Bash-Skripte vom Terminal aus, um die Ergebnisse anzuzeigen.
Einzelne Artikel
Durchlaufen Sie eine Reihe gegebener Elemente und geben Sie jedes mit der folgenden Syntax aus:
#!/bin/bash
# For loop with individual numbers
for i in 0 1 2 3 4 5
do
echo "Element $i"
done
Führen Sie das Skript aus, um die Ausgabe anzuzeigen:
. <script name>
Das Skript gibt jedes Element aus der bereitgestellten Liste an die Konsole aus.
Alternativ können Sie Zeichenfolgen in einer durch Leerzeichen getrennten Liste verwenden:
#!/bin/bash
# For loop with individual strings
for i in "zero" "one" "two" "three" "four" "five"
do
echo "Element $i"
done
Speichern Sie das Skript und führen Sie es vom Terminal aus aus, um das Ergebnis anzuzeigen.
Die Ausgabe gibt jedes Element an die Konsole aus und verlässt die Schleife.
Bereich
Anstatt eine Liste einzelner Elemente zu schreiben, verwenden Sie die Bereichssyntax und geben Sie das erste und letzte Element an:
#!/bin/bash
# For loop with number range
for i in {0..5}
do
echo "Element $i"
done
Das Skript gibt alle Elemente aus dem bereitgestellten Bereich aus.
Die Bereichssyntax funktioniert auch für Buchstaben. Zum Beispiel:
#!/bin/bash
# For loop with letter range
for i in {a..f}
do
echo "Element $i"
done
Das Skript gibt Buchstaben in aufsteigender Reihenfolge im angegebenen Bereich an die Konsole aus.
Die Bereichssyntax funktioniert für Elemente in absteigender Reihenfolge, wenn das Startelement größer als das Ende ist.
Zum Beispiel:
#!/bin/bash
# For loop with reverse number range
for i in {5..0}
do
echo "Element $i"
done
Die Ausgabe listet die Nummern in umgekehrter Reihenfolge auf.
Die Bereichssyntax funktioniert unabhängig davon, ob Elemente zunehmen oder abnehmen.
Bereich mit Inkrement
Verwenden Sie die Bereichssyntax und fügen Sie den Schrittwert hinzu, um den Bereich in Intervallen zu durchlaufen.
Verwenden Sie beispielsweise den folgenden Code, um gerade Zahlen aufzulisten:
#!/bin/bash
# For loop with range increment numbers
for i in {0..10..2}
do
echo "Element $i"
done
Die Ausgabe gibt jede zweite Ziffer aus dem angegebenen Bereich aus.
Alternativ können Sie in geraden Zahlen von zehn bis null rückwärts zählen:
#!/bin/bash
# For loop with reverse range increment numbers
for i in {10..0..2}
do
echo "Element $i"
done
Führen Sie das Skript aus, um jedes andere Element aus dem Bereich in absteigender Reihenfolge zu drucken.
Tauschen Sie das Inkrement 2
aus für jede Zahl kleiner als der Abstand zwischen den Bereichen, um Werte für verschiedene Intervalle zu erhalten.
Der seq-Befehl
Die seq
Befehl generiert eine Zahlenfolge. Analysieren Sie die Sequenz im Bash-Skript for
Schleife als Befehl zum Generieren einer Liste.
Zum Beispiel:
#!/bin/bash
# For loop with seq command
for i in $(seq 0 2 10)
do
echo "Element $i"
done
Die Ausgabe gibt jedes von seq
generierte Element aus Befehl.
Die seq
Der Befehl ist ein historischer Befehl und keine empfohlene Methode zum Generieren einer Sequenz. Die integrierten Methoden mit geschweiften Klammern sind vorzuziehen und schneller.
C-Stil
Bash-Skripte erlauben im C-Stil drei Parameter for
Schleifensteuerungsausdrücke. Fügen Sie den Ausdruck zwischen doppelten Klammern wie folgt hinzu:
#!/bin/bash
# For loop C-style
for (( i=0; i<=5; i++ ))
do
echo "Element $i"
done
Der Ausdruck besteht aus:
- Der Initialisierer (
i=0
) bestimmt die Zahl, bei der die Schleife zu zählen beginnt. - Stoppbedingung (
i<=5
) gibt an, wann die Schleife beendet wird. - Schritt (
i++
) erhöht den Wert voni
bis zur Stoppbedingung.
Trennen Sie jede Bedingung durch ein Semikolon (;
). Passen Sie die drei Werte nach Bedarf für Ihren Anwendungsfall an.
Das Terminal gibt jedes Element aus, beginnend mit dem Initialisierungswert.
Der Wert erhöht sich um den Schrittbetrag bis zur Stoppbedingung.
Endlosschleifen
Unendlich for
Schleifen haben keine Bedingung, um die Schleife zu beenden. Das Programm läuft endlos, weil die Endbedingung nicht existiert oder nie erfüllt wird.
Zum Generieren eines unendlichen for
loop, fügen Sie den folgenden Code zu einem Bash-Skript hinzu:
#!/bin/bash
# Infinite for loop
for (( ; ; ))
do
echo "CTRL+C to exit"
done
Um die Ausführung des Skripts zu beenden, drücken Sie STRG +C .
Endlosschleifen sind hilfreich, wenn ein Programm läuft, bis eine bestimmte Bedingung erfüllt ist.
Pause
Die break-Anweisung beendet die aktuelle Schleife und hilft beim Beenden von for
Schleife früh. Dieses Verhalten ermöglicht das Verlassen der Schleife, bevor eine angegebene Bedingung erfüllt wird.
Fügen Sie zur Demonstration den folgenden Code zu einem Bash-Skript hinzu:
#!/bin/bash
# Infinite for loop with break
i=0
for (( ; ; ))
do
echo "Iteration: ${i}"
(( i++ ))
if [[ i -gt 10 ]]
then
break;
fi
done
echo "Done!"
Das Beispiel zeigt, wie man ein unendliches for
beendet Schleife mit einem break
. Die if-Anweisung von Bash hilft bei der Überprüfung des Werts für jede Ganzzahl und stellt den break
bereit Bedingung. Dies beendet das Skript, wenn eine ganze Zahl den Wert zehn erreicht.
Um eine verschachtelte Schleife und eine äußere Schleife zu verlassen, verwenden Sie break 2
.
Weiter
Die continue
Befehl beendet die Iteration der aktuellen Schleife. Das Programm setzt die Schleife fort, beginnend mit der folgenden Iteration. Fügen Sie zur Veranschaulichung den folgenden Code zu einem Bash-Skript hinzu, um zu sehen, wie der continue
-Anweisung funktioniert in einem for
Schleife:
#!/bin/bash
# For loop with continue statement
for i in {1..100}
do
if [[ $i%11 -ne 0 ]]
then
continue
fi
echo $i
done
Der Code prüft Zahlen zwischen eins und hundert und gibt nur Zahlen aus, die durch elf teilbar sind.
Die Bedingung if
-Anweisung prüft auf Teilbarkeit, während die continue
Anweisung überspringt alle Zahlen, die einen Rest haben, wenn sie durch elf geteilt werden.
Arrays
Arrays speichern eine Liste von Elementen. Der for
loop bietet eine Methode, um Arrays nach Elementen zu durchlaufen.
Definieren Sie beispielsweise ein Array und durchlaufen Sie die Elemente mit:
#!/bin/bash
# For loop with array
array=(1 2 3 4 5)
for i in ${array[@]}
do
echo "Element $i"
done
Die Ausgabe gibt jedes im Array gespeicherte Element vom ersten bis zum letzten aus.
Die Bash for
Schleife ist die einzige Methode, um einzelne Array-Elemente zu durchlaufen.
Indizes
Beim Arbeiten mit Arrays hat jedes Element einen Index.
Listen Sie die Indizes eines Arrays mit dem folgenden Code auf:
#!/bin/bash
# For loop with array indices
array=(1 2 3 4 5)
for i in ${!array[@]}
do
echo "Array indices $i"
done
Die Elementindizierung beginnt bei Null. Daher hat das erste Element einen Index Null.
Die Ausgabe gibt Zahlen von null bis vier für ein Array mit fünf Elementen aus.
Verschachtelte Schleifen
Um mehrdimensionale Arrays zu durchlaufen oder zu generieren, verwenden Sie verschachteltes for
Schleifen.
Generieren Sie beispielsweise Dezimalwerte von null bis drei mithilfe von verschachtelten Schleifen:
#!/bin/bash
# Nested for loop
for (( i = 0; i <= 2; i++ ))
do
for (( j = 0 ; j <= 9; j++ ))
do
echo -n " $i.$j "
done
echo ""
done
Der Code macht Folgendes:
- Zeile 1 startet den
for
Schleife bei Null, inkrementiert um eins und endet bei zwei, einschließlich. - Zeile 3 startet den verschachtelten
for
Schleife bei Null. Der Wert wird um eins erhöht und endet bei neun (einschließlich). - Zeile 5 druckt die Werte aus
for
Schleifen. Das verschachtelte for durchläuft alle Zahlen dreimal, einmal für jeden Wert der äußeren Schleife.
Die Ausgabe gibt jede Zahlenkombination auf der Konsole aus und fügt eine neue Zeile ein, wenn r Schleife beendet eine Iteration.
Strings
Um Wörter in einer Zeichenfolge zu durchlaufen, speichern Sie die Zeichenfolge in einer Variablen. Analysieren Sie dann die Variable zu einem for
Schleife als Liste.
Zum Beispiel:
#!/bin/bash
# For loop with string
strings="I am a string"
for i in ${strings}
do
echo "String $i"
done
Die Schleife durchläuft den String, wobei jedes Wort ein separates Element ist.
Die Ausgabe gibt einzelne Wörter aus dem String an die Konsole aus.
Dateien
Der for
-Schleife in Kombination mit Näherungssuchen hilft beim Auflisten oder Ändern von Dateien, die eine bestimmte Bedingung erfüllen.
Listen Sie beispielsweise alle Bash-Skripte im aktuellen Verzeichnis mit einem for
auf Schleife:
#!/bin/bash
# For loop with files
for f in *.sh
do
echo $f
done
Das Skript durchsucht das aktuelle Verzeichnis und listet alle Dateien mit der Endung .sh auf Erweiterung.
Durchlaufen Sie Dateien oder Verzeichnisse, um Berechtigungen für mehrere Elemente gleichzeitig automatisch umzubenennen oder zu ändern.
Befehlsersetzung
Der for
Schleife akzeptiert die Befehlsersetzung als eine Liste von Elementen, die durchlaufen werden müssen.
Das nächste Beispiel zeigt, wie ein for
geschrieben wird Schleife mit Befehlsersetzung:
#!/bin/bash
# For loop with command substitution
list=`cat list.txt`
# Alternatively, use list=$(cat list.txt)
for i in $list
do
echo $i
done
Der Bash-Kommentar bietet eine alternative Syntax für die Befehlsersetzung. Der Code liest den Inhalt der list.txt Datei mit dem cat
Befehl und speichert die Informationen in einer Variablen list
.
Verwenden Sie die Befehlsersetzungsmethode, um Dateien aus einer Liste von Namen umzubenennen, die in einer Textdatei gespeichert sind.
Hinweis: Erfahren Sie, wie Sie den cat-Befehl und die for-Schleife verwenden, um Dateien Zeile für Zeile in Bash zu lesen.
Befehlszeilenargumente
Verwenden Sie den for
Schleife, um Befehlszeilenargumente zu durchlaufen.
Der folgende Beispielcode zeigt, wie Befehlszeilenargumente in einem for
gelesen werden Schleife:
#!/bin/bash
# For loop expecting command line arguments
for i in [email protected]
do
echo "$i"
done
Geben Sie die Befehlszeilenargumente an, wenn Sie das Bash-Skript ausführen.
Zum Beispiel:
. <script name> foo bar
Der [email protected]
ersetzt jedes Befehlszeilenargument durch for
Schleife.
Fazit
Nachdem Sie dieses Tutorial befolgt haben, wissen Sie, wie Sie for
verwenden Schleife in Bash-Skripten, um Listen zu durchlaufen.
Als Nächstes erfahren Sie, wie Sie Bash-Funktionen schreiben und verwenden.