30 Bash loop examples

Drei Arten von Schleifen werden in bash für verschiedene Zwecke verwendet. Dies sind for-, while- und until-Schleifen. Die verschiedenen Verwendungen dieser Schleifen werden anhand von 30 verschiedenen Beispielen in diesem Artikel erläutert.

Verwendung von Bash-Schleifen:

  1. Verwenden der for-Schleife zum Lesen von Elementen in einer Liste
  2. Verwenden der for-Schleife zum Lesen eines Arrays
  3. Verwenden der for-Schleife zum Lesen einer Liste von Zeichenfolgenwerten mit Leerzeichen
  4. Verwenden der for-Schleife in {START..ENDE..INKREMENT} Bereich
  5. Mit for-Schleife in {START..ENDE..INKREMENT} Bereich rückwärts gehen
  6. Verwenden einer for-Schleife mit 3 Teilen und Bedingungszähler
  7. Verwenden einer for-Schleife mit 3 Teilen und mehreren Bedingungen und Aktionen mit Komma
  8. Verwenden einer unendlichen for-Schleife
  9. Verwenden einer for-Schleife mit bedingtem Break und continue
  10. Verwenden einer for-Schleife zum Lesen von Dateinamen durch Globbing
  11. schleife zum Lesen der Ausgabe vom Befehl find
  12. Verwenden der for-Schleife zum rekursiven Lesen von Dateinamen eines Verzeichnisses
  13. Verwenden der for-Schleife zum rekursiven Lesen von Dateinamen eines Verzeichnisses mit der Bedingung
  14. Ausführen der Schleife datei existiert
  15. Verwenden der for-Schleife basierend auf der Ausgabe des Paketlistenbefehls
  16. Verwenden der for-Schleife zum Lesen jeder Zeile einer Datei
  17. Verwenden der for-Schleife zum Lesen jeder Zeile einer Datei basierend auf einer bedingten Übereinstimmung
  18. Verwenden der while-Schleife mit einem Zähler
  19. Verwenden der while-Schleife mit Benutzereingabe und Beenden bei Auswahl von Beenden aus einem Menü
  20. while-Schleifen mit Getopts kombinieren
  21. until-Schleife mit Zähler verwenden
  22. until-Schleife basierend auf Benutzereingaben beenden
  23. Verschachtelte while-Schleifen verwenden
  24. until-Schleife zum Schlafen / Warten auf Hintergrundaufgabe verwenden gestartet im Skript
  25. Verwenden der while-Schleife zum Lesen der PID aus einer nicht beendeten Ausgabe
  26. Durchsuchen einer beliebigen Zeichenfolge in einer Datei mithilfe der Schleife und Beenden
  27. Kombinieren von bash mit curl zum Auswerten von Daten aus der URL
  28. Lesen von Daten von einem von netcat gesendeten Port mithilfe der while-Schleife
  29. top im Batch-Modus mit einer Schleife und Datensatzausgabe

Verwenden der for-Schleife zum Lesen von Elementen in einer Liste

Die einfachste Verwendung der for-Schleife besteht darin, eine Liste von Zeichenfolgen oder numerischen Daten zu lesen. Die Liste der numerischen Daten wird im folgenden Beispiel mithilfe der for-in-Schleife iteriert. Hier werden vier Zahlen in der Variablen gelesen, $ n in jedem Schritt der Schleife und gedruckt. Erstellen Sie eine Bash-Datei mit dem folgenden Skript und führen Sie sie vom Terminal aus aus.

#!/bin/bash
# for-in Schleife zum Lesen einer Zahlenliste
für n in 10 11 17 25
do
# Jede Zahl drucken
echo „Die Zahl ist $n“
done

Ausgabe:

Führen Sie das Skript aus.

$ bash for1.sh

Nach dem Ausführen des Skripts wird die folgende Ausgabe angezeigt.

Nach oben gehen

Verwenden der for-Schleife zum Lesen eines Arrays

Jede Array-Variable enthält eine Liste von Daten, die mithilfe der for-in-Schleife sehr einfach iteriert werden können. Das folgende Beispiel zeigt die Verwendung der for-in-Schleife zum Lesen eines Arrays von Zeichenfolgendaten. Hier ruft jeder Array-Wert die Variable $language ab und gibt in jeder Iteration eine Nachricht basierend auf der Sprache aus.

#!/bin/bash
languages=(„Bash PERL Python PHP“)
für Sprache in $languages
do
if
then
echo „$language ist eine Webprogrammiersprache“
else
echo „$language ist eine Skriptsprache“
fi
done

Ausgabe:

Führen Sie das Skript aus.

$ bash for2.sh

Nach dem Ausführen des Skripts wird die folgende Ausgabe angezeigt.

Zum Anfang gehen

Verwenden der for-Schleife zum Lesen einer Liste von Zeichenfolgenwerten mit Leerzeichen

Wenn eine Liste einer Zeichenfolge von einer for-in-Schleife gelesen wird und ein Zeichenfolgenwert Leerzeichen enthält, werden die Werte in Wörter aufgeteilt, die auf Leerzeichen basieren, wenn der Zeichenfolgenwert nicht mit einem einfachen oder doppelten Anführungszeichen angegeben wird. Das folgende Beispiel zeigt, wie eine Liste von Zeichenfolgenwerten mit Leerzeichen von der for-in-Schleife gelesen werden kann. Hier enthält ein Wert der Liste Leerzeichen und wird mit dem Leerzeichen in der Ausgabe gedruckt.

#!/bin/bash
#for-in Schleife zum Lesen der Liste der Zeichenfolgen mit Leerzeichen
für os in „Ubuntu“ „Linux Mint“ „Fedora“ „CentOS“
do
#Jede Zeichenfolge drucken
echo „Operating System – $os“
done

Ausgabe:

Führen Sie das Skript aus.

$ bash for3.sh

Hier wird der String-Wert ‚Linux Mint‘ korrekt gedruckt.

Gehe nach oben

Mit for-Schleife in {START..ENDE..INCREMENT} range

Eine weitere Verwendung der for-in Schleife ist das Lesen des Bereichsarrays. Im folgenden Beispiel wird eine for-Schleife verwendet, um einen Datenbereich von 10 bis 30 zu lesen, der in jedem Schritt um 5 erhöht wird. Als nächstes druckt das Skript die Zahlen im Bereich, die durch 10 teilbar sind.

#!/bin/bash
# Lesen Sie einen Bereich mit der for-Schleife
für num in {10..30..5}
do
# Überprüfen Sie, ob die Zahl durch 10 teilbar ist oder nicht
if (( $num%10==0 ))
dann
echo „$num ist durch 10 teilbar“
fi
fertig

Ausgabe:

Führen Sie das Skript aus.

$ bash for4.sh

Nach dem Ausführen des Skripts wird die folgende Ausgabe angezeigt.

Gehe nach oben

Mit for-Schleife in {START..ENDE..INCREMENT} range going backward

Der Datenbereich kann mithilfe der for-in Schleife rückwärts gelesen werden, wobei der Startwert des Bereichs größer als der Endwert des Bereichs ist. Im folgenden Beispiel beginnt der Bereich bei 50 und endet bei 30. Der Wert von $num wird in jedem Schritt der Schleife um 10 verringert. Das Skript druckt die Zahlen aus dem Bereich, die durch 5 und 10 teilbar sind.

#!/bin/bash
echo „Die folgenden Zahlen sind durch 5 und 10 teilbar“
# Lesen Sie einen Bereich mit der for-Schleife
für num in {50..30..10}
do
# Überprüfen Sie, ob die Zahl durch 5 und 10 teilbar ist oder nicht
if (( $num%5==0 && $ num%10==0 ))
dann
echo -n „$num „
fi
fertig
echo „Fertig“

Ausgabe:

Führen Sie das Skript aus.

$ bash for5.sh

Nach dem Ausführen des Skripts wird die folgende Ausgabe angezeigt.

Nach oben gehen

For-Schleife mit 3 Teilen und Bedingungszähler verwenden

Bash unterstützt for-Schleife mit drei Teilen wie andere Standardprogrammiersprachen. Der erste Teil enthält die Initialisierung, der zweite Teil enthält die Beendigungsbedingung und der dritte Teil enthält die Inkrement- oder Dekrementoperation. Diese Schleife wird hauptsächlich verwendet, wenn die Anzahl der Iterationen zuvor definiert wurde. Im folgenden Beispiel iteriert die for-Schleife 50 Mal und berechnet die Summe von 1 bis 50. Das Ergebnis der Summierung wird als Ausgabe ausgegeben.

#!/bin/bash
# Initialisiere die Variable
sum=0
# Schleife wird 50 Mal iteriert
für (( n=1; n<=50; n++ ))
do
# Füge den Summenwert mit dem nächsten Wert von n hinzu
((sum=$sum+$n))
fertig
# Drucke das Ergebnis
echo „Die Summe von 1 bis 50 ist $sum“

Ausgabe:

Führen Sie das Skript aus.

$ bash for6.sh

Die Summe von 1 bis 50 wird in der Ausgabe angezeigt.

Nach oben gehen

for-Schleife mit 3 Teilen und mehreren Bedingungen und Aktionen mit Komma verwenden

For-Schleife mit drei Teilen kann mit mehreren Initialisierungen, Beendigungsbedingungen und Aktionen definiert werden. Das folgende Beispiel zeigt die Verwendung dieser Art von Schleife. Hier werden die Variablen $ x und $ y mit 5 und 25 initialisiert. Die Schleife wird fortgesetzt, bis der Wert von $ x kleiner oder gleich 20 und der Wert von $ y größer als 5 ist. Der Wert von $ x erhöht sich um 5 und der Wert von $ y verringert sich in jeder Iteration der Schleife um 5. Der aktuelle Wert von $ x und $ y in jedem Schritt wird als Ausgabe ausgegeben.

#!/bin/bash
# Schleife iteriert basierend auf zwei Bedingungen
für (( x=5, y=25; x<=20 && y>5; x+=5,y-=5 ))
do
echo „Der aktuelle Wert von x=$x und y=$y“
done

Ausgabe:

Führen Sie das Skript aus.

$ bash for7.sh

Nach dem Ausführen des Skripts wird die folgende Ausgabe angezeigt.

Nach oben gehen

Verwenden einer unendlichen For-Schleife

Wenn eine Schleife ohne Abschlussbedingung definiert ist, funktioniert die Schleife als Endlosschleife. Das folgende Beispiel zeigt die Verwendung einer unendlichen for-Schleife, die keine Initialisierungs-, Terminierungs- und Aktionsteile enthält. Diese Art von for-Schleife wird durch ein doppeltes Semikolon (; 😉 definiert. Das folgende Skript setzt die Schleife fort, bis der Benutzer ‚quit‘ als Eingabe eingibt. Das Skript druckt eine beliebige Zahl von 1 bis 20, die als Eingabe verwendet wird, andernfalls wird „Die Zahl liegt außerhalb des Bereichs“

#!/bin/bash
# Endlosschleife deklarieren
für (( ; ; ))
do
# Take a input
echo „Enter a number between 1 to 20“
read n
# Stellen Sie die Beendigungsbedingung der Schleife ein
if
then
echo „Program terminated“
exit 0
fi
# Überprüfen Sie den Nummernbereich
if (( $n < 1 || $n > 20 ))
then
echo „Die Nummer liegt außerhalb des Bereichs“
else
echo „Die Nummer ist $n“
fi
done

Output:

Run the script.

$ bash für mich.sh

Hier wird 6 als erste Eingabe verwendet, die eine gültige Nummer ist, 22 wird als zweite Eingabe verwendet, die eine ungültige Nummer ist, und quit wird als dritte Eingabe verwendet, die das Skript beendet hat.

Nach oben gehen

Verwenden der for-Schleife mit bedingtem Break und continue

Die ‚continue‘-Anweisung wird verwendet, um einige Teile der Schleife basierend auf einer beliebigen Bedingung wegzulassen, und die ‚break‘-Anweisung wird verwendet, um die Schleife basierend auf einer beliebigen Bedingung zu beenden. Das folgende Beispiel zeigt die Verwendung dieser Anweisungen in einer for-Schleife. Hier wird die Schleife verwendet, um eine Liste von Zeichenfolgendaten zu lesen, und jeder Wert in der Liste wird in der Variablen $ food gespeichert. Wenn der Wert von $food ‚Soup‘ ist, wird die Schleife fortgesetzt, ohne den Wert zu drucken. Wenn der Wert von $food ‚Pasta‘ ist, wird die Schleife beendet. Wenn $food einen anderen Wert als ‚Suppe‘ und ‚Pasta‘ enthält, wird der Wert gedruckt. Das Skript druckt also zwei Werte aus der Liste als Ausgabe.

#!/bin/bash
# Deklariere eine Schleife mit einer Liste
für Essen in Pizza Suppe Burger Pasta Nudeln
do
# Bedingung für continue setzen
if
then
continue
# Bedingung für break setzen
elif
then
break
else
echo „$food is my favorite“
fi
fertig

Ausgabe:

Führen Sie das Skript aus.

$ bash for9.sh

Hier werden zwei Werte aus der Liste weggelassen. ‚Soup‘ wird nicht für die continue-Anweisung gedruckt und ‚Pasta‘ wird nicht für die break-Anweisung gedruckt.

Nach oben gehen

Verwenden der for-Schleife zum Lesen von Dateinamen durch Globbing

Dateinamen oder der bestimmte Inhalt einer Datei können mithilfe von Globbing durchsucht werden. Es verwendet verschiedene Arten von Platzhalterzeichen, um Dateinamen oder Suchinhalte in der Datei abzugleichen. Im folgenden Beispiel werden alle Dateien mit der Erweiterung txt des aktuellen Speicherorts durchsucht. Wenn Sie das Skript ausführen, werden alle übereinstimmenden Dateinamen ohne Zeilenumbruch als Ausgabe gedruckt.

#!/bin/bash
# Loop durchsucht alle Textdateien und speichert jeden Dateinamen in $file
nach Datei in „* .txt“;
do
# Drucken Sie den Dateinamen
echo $file;
done

Ausgabe:

Führen Sie das Skript aus.

$ bash for110.sh

Nach oben gehen

Verwenden der for-Schleife zum Lesen der Ausgabe des find-Befehls

Der Befehl ‚find‘ wird in bash für verschiedene Zwecke verwendet. Im folgenden Beispiel wird der Befehl ‚find‘ verwendet, um alle Textdateinamen vom aktuellen Speicherort zu lesen. Hier ‚-name‘ Option für Groß- und Kleinschreibung Suche zu verwenden. Das Skript druckt also die Dateinamen des aktuellen Speicherorts mit dem ‚.txt‘ Erweiterung mit einem beliebigen Namen. Hier wird die Variable IFS verwendet, um den Zeilenumbruch als Feldtrennzeichen zu definieren und den Wert von $file in jeder Zeile auszudrucken.

#!/bin/bash
# Set field separator
IFS=$’\n‘;
# Lesen Sie die Dateien eines Verzeichnisses
für die Datei in $(find -name „*.txt“); do
echo $file
done
#Uunset Feldtrennzeichen
unset IFS;

Ausgabe:

Führen Sie das Skript aus.

$ bash für11.sh

Nach dem Ausführen des Skripts wird die folgende Ausgabe angezeigt.

Nach oben

for-Schleife verwenden, um Dateinamen eines Verzeichnisses rekursiv zu lesen

Der Befehl ‚find‘ kann verwendet werden, um alle Dateien und Unterordner eines bestimmten Verzeichnisses zu lesen. Das folgende Beispiel zeigt die Verwendung des Befehls ‚find‘, um alle Dateinamen und Verzeichnisse im Verzeichnis ‚mydir‘ zu lesen. Hier wird die Variable IFS verwendet, um den Wert von $filename mit ’newline‘ wie im vorherigen Beispiel zu drucken.

#!/bin/bash
# Feldtrennzeichen setzen
IFS=$’\n‘;
# Lesen Sie die Dateien eines Verzeichnisses
für Dateinamen in $(find „mydir“)
do
echo „$filename“
done
# Feldtrennzeichen aufheben
IFS aufheben;

Ausgabe:

Führen Sie das Skript aus.

$ bash for12.sh

Nach dem Ausführen des Skripts wird die folgende Ausgabe angezeigt.

Nach oben gehen

Verwenden der for-Schleife zum rekursiven Lesen von Dateinamen eines Verzeichnisses mit der Bedingung

‚for‘ Schleife mit dem Befehl ‚find‘ kann verwendet werden, um som+

e zu drucken bestimmte Dateinamen eines Verzeichnisses basierend auf einer beliebigen Bedingung. Der Befehl ‚find‘ wird im folgenden Beispiel mit einer Bedingung verwendet. Es werden nur Textdateinamen des Verzeichnisses mydir durchsucht. Hier wird die Option ‚-iname‘ mit dem Befehl ‚find‘ für die Suche ohne Berücksichtigung der Groß- und Kleinschreibung verwendet. Das bedeutet, dass alle Dateien mit der Endung ‚txt‘ oder ‚TXT‘ abgeglichen und als Ausgabe gedruckt werden. Hier wird die Variable IFS verwendet, um den Wert von $filename mit ’newline‘ wie im vorherigen Beispiel zu drucken.

#!/bin/bash
# Feldtrennzeichen setzen
IFS=$’\n‘;
# Alle Textdateien eines Verzeichnisses lesen
für Dateinamen in $(find mydir -iname ‚*.txt‘); do
echo „$filename“
done
# Feldtrennzeichen aufheben
IFS aufheben;

Ausgabe:

Führen Sie den folgenden Befehl aus, um die Liste der Dateien und Ordner des Verzeichnisses mydir anzuzeigen.

$ ls mydir

Führen Sie das Skript aus.

$ bash für13.sh

Das Verzeichnis enthält drei Textdateien, die in der Ausgabe angezeigt werden.

Nach oben gehen

Ausführen der Schleife, bis die Datei existiert

Im folgenden Beispiel wird mithilfe der unendlichen for-Schleife geprüft, ob ein Dateiname existiert oder nicht. In diesem Skript wird ein Dateiname als Eingabe in jeder Iteration der Schleife verwendet und getestet, ob der Dateiname am aktuellen Speicherort vorhanden ist oder nicht. Wenn der Dateiname vorhanden ist, gibt das Skript „Datei vorhanden“ aus und setzt die Schleife fort, andernfalls wird die Schleife durch Drucken der Meldung „Datei existiert nicht“ beendet.

#!/bin/bash
# Endlosschleife definieren
für(( ; ; ))
do
# Geben Sie einen Dateinamen ein
echo „Geben Sie einen Dateinamen ein“
Datei lesen
# Überprüfen Sie, ob die Datei vorhanden ist oder nicht
if
then
echo „Dateiname existiert nicht“
exit 0
else
echo „Datei existiert“
fi
fertig

Ausgabe:

Führen Sie das Skript aus.

$ bash loop14.sh

Als erste Eingabe wird ein vorhandener Dateiname und als zweite Ausgabe ein nicht vorhandener Dateiname angegeben, der das Skript beendet.

Nach oben gehen

Verwenden der for-Schleife basierend auf der Ausgabe des Paketlistenbefehls

Die Informationen zu den installierten Paketen im System können mit dem Befehl `apt list – -installed` abgerufen werden. ‚for‘-Schleife wird im folgenden Beispiel verwendet, um die installierten Paketinformationen aus dem Paketlistenbefehl zu lesen und jede Paketinformation in jeder Zeile auszudrucken. Die IFS-Variable wird hier verwendet, um den Wert von $line mit ’newline‘ wie im vorherigen Beispiel zu drucken.

# Feldtrennzeichen setzen
IFS=$’\n‘;
# Datei Zeile für Zeile lesen
für Zeile in $(apt list –installed)
do
echo „$line“
done
# Feldtrennzeichen aufheben
IFS aufheben;

Ausgabe:

Führen Sie das Skript aus.

$ bash for15.sh

Die Ausgabe zeigt die Liste der installierten Pakete.

Nach oben gehen

Verwenden der for-Schleife zum Lesen von Zeilen einer Datei

Es gibt viele Möglichkeiten, eine Datei in bash zu lesen. ‚cat‘ Befehl wird im folgenden Beispiel verwendet, um die Datei zu lesen, temp.txt. Jede Zeile der Datei wird in der Variablen $line gespeichert und die Zeile in jeder Iteration der for-Schleife gedruckt. Die IFS-Variable wird hier verwendet, um den Wert von $line mit ’newline‘ wie im vorherigen Beispiel zu drucken.

#!/bin/bash
# Feldtrennzeichen setzen
IFS=$’\n‘;
# Datei Zeile für Zeile lesen
für Zeile in $(cat temp.txt)
do
echo „$line“
done
# Feldtrennzeichen nicht setzen
IFS nicht setzen;

Ausgabe:

Führen Sie das Skript aus.

$ bash für16.sh

Nach oben gehen

Verwenden der for-Schleife zum Lesen von Zeilen einer Datei mit bedingter Übereinstimmung

Wenn Sie nur bestimmte Zeilen aus einer Datei drucken möchten, müssen Sie sie in die Schleife einfügen, die zum Lesen der Datei verwendet wird. Im folgenden Beispiel wird die formatierte Ausgabe jeder Zeile von ‚weekday .txt‘-Datei basierend auf einer Bedingung. Wenn eine Zeile der Datei den Wert ‚Sonntag‘ enthält, wird die Nachricht ‚Feiertag‘ gedruckt, andernfalls wird die Nachricht ‚Arbeitstag‘ gedruckt.

# Lesen Sie die Datei
für die Zeile in $(cat weekday.txt)
do
#Vergleichen Sie den Wert mit einer Zeichenfolge data
if
then
echo „$line is a holiday“
else
echo „$line is a working day“
fi
done

Output:

Führen Sie das Skript aus.

$ bash for17.sh

Nach dem Ausführen des Skripts wird die folgende Ausgabe angezeigt.

Nach oben gehen

Verwenden der while-Schleife mit einem Zähler

$counter Variable wird jede Schleife verwendet, um die Iteration der Schleife zu steuern. Das folgende Beispiel zeigt die Verwendung der while-Schleife mit dem Zähler. Hier wird $ counter auf 1 initialisiert und die while-Schleife iteriert 5 Mal und gibt den Wert von $ counter in jeder Iteration aus. $counter wird in jedem Schritt um 1 erhöht, um die Beendigungsbedingung der Schleife zu erreichen.

#!/bin/bash
# Zähler initialisieren
Zähler=1
# Iteriere die Schleife 5 mal
while
do
echo „Counter value = $counter“
((counter++))
done

Ausgabe:

Führen Sie das Skript aus.

$ bash loop18.sh

Nach oben gehen

Verwenden der while-Schleife mit Benutzereingabe und Beenden bei Auswahl von Beenden aus dem Menü

‚while‘-Schleife wird im folgenden Beispiel verwendet, um ein Menü mit 5 Optionen anzuzeigen. Die ersten vier Optionen werden verwendet, um vier arithmetische Operationen basierend auf der Eingabe des Benutzers auszuführen, und die letzte Option wird verwendet, um das Skript zu beenden. Das Menü wird angezeigt, nachdem Sie zwei Zahlen als Eingabe angegeben haben. Wenn der Benutzer ‚1‘ auswählt, werden die eingegebenen Nummern hinzugefügt. Wenn der Benutzer ‚2‘ auswählt, wird die zweite Eingabenummer von der ersten Eingabenummer subtrahiert. Wenn der Benutzer ‚3‘ auswählt, werden die Eingabenummern multipliziert, und wenn der Benutzer ‚4‘ auswählt, wird die erste Eingabenummer durch die zweite Eingabenummer geteilt.

#!/bin/bash
# Take two numbers
echo „Enter a number“
read n1
echo „Enter a number“
read n2
# Deklariere eine Endlosschleife
while true
do
# Anzeige des Menüs
echo „1. Zusatz“
echo „2. Subtraktion“
Echo „3. Multiplikation“
echo „4. Abteilung“
Echo „5. Exit“
echo -n „Wählen Sie eine beliebige Zahl aus :“
read input
# Führen Sie die Operation basierend auf dem ausgewählten Wert aus
if ]
then
((result=n1+n2))
elif ]
then
((result=n1-n2))
elif ]
then
((result=$n1*$n2))
elif ]
then
((result=$n1/$n2))
elif ]
then
exit 0
else
echo „Ungültige Eingabe“
fi
echo „Das Ergebnis ist $result“
done

Ausgabe:

Führen Sie das Skript aus.

$ bash loop19.sh

Nach Auswahl der Optionen 2 und 5 erscheint die folgende Ausgabe.

Nach oben

while-Schleifen mit getopts kombinieren

‚getopts‘ ist eine integrierte Funktion von bash, die zum Lesen von Argumenten und Optionen im Bash-Skript verwendet wird. Das folgende Beispiel zeigt die Verwendung der getopts-Funktion, die in einer while-Schleife verwendet wird. Hier werden drei Optionswerte mit getopts verwendet. Dies sind ‚a‘, ‚r‘ und ‚c‘. Für diese Optionen werden drei verschiedene Meldungen gedruckt.

#!/bin/bash
# Lesen Sie die Option und speichern Sie sie in einer Variablen
, während Sie die Option „arc“ verwenden; do
# Überprüfen Sie den Optionswert
case ${option} in
a ) #option a
echo „Prozess wird abgebrochen“
;;
r ) #Option r
echo „Prozess wird neu gestartet“
;;
c ) #Option c
echo „Prozess wird fortgesetzt“
;;
\? ) #invalid option
echo „Use: or or „
;;
esac
done

Output:

Führen Sie das Skript mit gültigen Optionen aus.

$ bash loop20.sh -arc

Führen Sie das Skript mit einer ungültigen Option aus.

$ bash loop20.sh -h

Nach oben gehen

Verwenden der until-Schleife mit einem Zähler

Die Until-Schleife kann mit einem Zähler wie der zuvor gezeigten while-Schleife verwendet werden. Das folgende Beispiel zeigt die Verwendung einer until-Schleife mit einem Zähler. Hier wird die Variable $counter verwendet, um die Iteration der Schleife zu steuern, die auf 1 initialisiert wird. Die until-Schleife wird fortgesetzt, bis der Wert von $ auf 5 steigt. Die Schleife iteriert also 6 Mal und gibt in jedem Schritt den Wert $ counter aus. $ counter wird in jedem Schritt um 1 dekrementiert, um die Beendigungsbedingung der Schleife zu erreichen.

#!/bin/bash
# Initialisiere den Zähler
counter=10
# Iteriere die Schleife 6 mal
bis
do
echo „Der aktuelle Wert von counter = $counter“
((counter–))
done

Ausgabe:

Führen Sie das Skript.

$ bash loop21.sh

Nach oben gehen

Beenden bis Schleife basierend auf Benutzereingaben

Jede Schleife wird basierend auf einer bestimmten Bedingung beendet. Wie die Schleife basierend auf Benutzereingaben beendet werden kann, wird im folgenden Beispiel gezeigt. Gemäß der Beendigungsbedingung wird die Schleife beendet, wenn der Wert von $number größer als 50 ist. Der Wert von $number wird innerhalb der Schleife nicht erhöht. So. nimmt die Schleife weiterhin Eingaben vom Benutzer entgegen, bis eine Zahl von mehr als 50 als Eingabe verwendet wird.

#!/bin/bash
# Initialize number
number=0
# Legen Sie das Muster für numerische Daten fest
Muster=’^+$‘
# Setzen Sie die Beendigungsbedingung
until
do
echo -n „Enter a number : „
read number
# Überprüfen Sie, ob der Eingabewert number ist oder nicht
if ! ]
dann
echo „Fehler: Keine Zahl“
number=0
else
echo „Sie haben $number eingegeben“
fi
fertig

Ausgabe:

Führen Sie das Skript aus.

$ bash loop22.sh

Das Skript wiederholt die Schleife für den Eingabewert 4, zeigt die Fehlermeldung für den Eingabewert gg an und beendet die Schleife für den Eingabewert 54.

Nach oben gehen

Verwenden verschachtelter while-Schleifen

Wenn eine Schleife in einer anderen Schleife deklariert wird, wird sie als Endlosschleife bezeichnet. Das folgende Beispiel zeigt die Verwendung einer verschachtelten while-Schleife. Hier iteriert die erste while-Schleife 2 Mal und die zweite while-Schleife innerhalb der ersten Schleife dreimal. Die Gesamtiteration der Schleifen beträgt 2 × 3 = 6 mal. Die Variablen $i und $ j werden verwendet, um die Iteration dieser Schleifen zu steuern, und die Werte dieser Variablen in jedem Schritt werden als Ausgabe ausgegeben.

#!/bin/bash
# Initialisiere i und j
i=1
j=1
# Setze die Beendigungsbedingung für i
while
do
# Setze die Beendigungsbedingung für j
while
do
# Drucke den aktuellen Wert von i und j
printf „i=%d, j=%d\n“ $i $ j
((j++))
erledigt
j=1
((i++))
erledigt

Ausgabe:

Führen Sie das Skript aus.

$ bash loop23.sh

Nach oben gehen

Verwenden der until-Schleife zum Schlafen / Warten auf die im Skript gestartete Hintergrundaufgabe

Jeder Prozess kann im Hintergrund ausgeführt werden, indem das Symbol ‚&‘ verwendet wird. In diesem Beispiel wird gezeigt, wie ein Prozess im Hintergrund mithilfe der until-Schleife ausgeführt und die Schleife basierend auf der im Befehl sleep angegebenen Zeit beendet werden kann. Hier wird die Variable $ cnt verwendet, um die Schleife zu beenden. Die Schleife startet den Hintergrundprozess und schreibt die Ausgabe in eine Textdatei mit dem Namen „Ausgabe.txt“ für 1 Sekunde. Danach wird die Beendigungsbedingung der Schleife überprüft und false zurückgegeben. Als nächstes gibt das Skript die Meldung „Sleeping …“ aus und beendet das Skript nach 3 Sekunden.

#!/bin/bash
# Zähler initialisieren
cnt=1
# Beendigungsbedingung setzen
bis
do
echo „Hintergrundprozess läuft“;
# 1 Sekunde warten
sleep 1;
((cnt++))
fertig > Ausgabe.txt &
# Warten für 3 sekunden
echo „Schlafen…“
schlafen 3

Ausgabe:

Führen Sie das Skript aus.

$ bash loop24.sh

Überprüfen Sie die Ausgabe des Skripts.

$ katze ausgang.txt

Nach oben gehen

Verwenden der while-Schleife zum Lesen der PID von der ps-Ausgabe, die nicht beendet ist

Der Befehl ‚ps‘ wird verwendet, um Informationen zu allen laufenden Prozessen des Systems abzurufen. Es bietet detaillierte Informationen zu jedem laufenden Prozess wie Benutzer-ID, PID, CPU-Auslastung, Speicherauslastung usw. Das folgende Beispiel zeigt, wie eine while-Schleife verwendet werden kann, um die laufenden Prozessinformationen zu ‚Apache‘ zu lesen. Hier wird die Variable IFS verwendet, um die PID jedes Prozesses mit einem Zeilenumbruch zu drucken. Als nächstes wartet es darauf, dass der Benutzer eine beliebige Taste drückt, um das Skript zu beenden.

#!/bin/bash
# Feldtrennzeichen setzen
IFS=‘ ‚
while
do
# Alle laufenden Prozess-ID von Apache abrufen
pid=`ps -ef | grep „apache“ | awk ‚ {print $2 “ Prozess läuft …“ }“
echo $pid
# 1 Sekunde warten
sleep 1
# Drücken Sie eine beliebige Taste, um die Schleife zu beenden
echo „Drücken Sie eine beliebige Taste, um die Schleife zu beenden“
if read -r -N 1 ; then
break
fi
done
# Feldtrennzeichen

Ausgabe:

Führen Sie das Skript aus.

$ bash loop25.sh

Die PID aller laufenden Prozesse basierend auf ‚apache‘ wird in der Ausgabe angezeigt.

Gehe nach oben

Suchen Sie eine beliebige Zeichenfolge in einer Datei mit loop und beenden Sie

Erstellen Sie eine Datei mit dem Namen month .txt mit dem folgenden Inhalt, um das unten angegebene Bash-Skript zu testen.

Monat.txt

January
February
March
April
May
June
July
August
September
October
November
December

‚ while‘ Schleife wird im folgenden Beispiel verwendet, um Monat zu lesen.txt-Datei Zeile für Zeile. Wenn eine Zeile den Wert ‚Juni‘ enthält, wird „Enjoy summer vacation“ gedruckt und aus dem Skript beendet, andernfalls wird der Wert von $line gedruckt.

#!/bin/bash
# Setzen Sie den Dateinamen auf read
filename=“month.txt“
# Datei Zeile für Zeile lesen
while IFS= read -r line
do
# Überprüfen Sie, ob der Wert der Zeile gleich Null ist
# Beenden Sie das Programm, wenn die Bedingung wahr ist
if ];
then
echo „Enjoy Summer vacation“
exit 0
else
echo $line
fi
fertig < $filename

Ausgabe:

Führen Sie das Skript aus.

$ bash loop26.sh

Hier existiert ‚Juni‘ im Dateimonat.txt, das die Schleife beendet. Daher werden andere Monatsnamen nach ‚Juni‘ nicht von der Schleife gelesen.

Zum Anfang

Kombinieren Sie bash mit curl, um Daten von der URL auszuwerten

Daten können mit dem Befehl ‚curl‘ mit jedem unterstützten Protokoll wie HTTP, FTP, TELNET usw. zu oder von einem beliebigen Netzwerkserver in bash übertragen werden. Es ist ein Kommandozeilen-Tool. Wie der Befehl ‚curl‘ verwendet werden kann, um Daten von der URL mithilfe der for-Schleife auszuwerten, wird im folgenden Beispiel gezeigt. Hier liest for loop eine Liste von URLs und übergibt jeden URL-Wert in der Curl und druckt die von der URL empfangenen Daten.

#!/bin/bash
# Lesen Sie jede URL aus der Liste
für URL in „yahoo.com“ „youtube.com „
do
# HTTP-Antwortcode für jede URL drucken
echo $url; curl -v -m 5 -s $1 „$url“ | grep HTTP/1.1;
fertig

Ausgabe:

Führen Sie das Skript aus.

$ bash loop27.sh

Nach oben

Lesen von Daten von einem Port, der von netcat mit while-Schleife gesendet wird

Der Befehl ’netcat‘ wird zum Lesen und Schreiben von Daten über das Netzwerk mithilfe des TCP- oder UDP-Protokolls verwendet. Der Befehl ’nc‘ wird in bash verwendet, um den Befehl ’netcat‘ auszuführen. Das folgende Beispiel zeigt die Verwendung des Befehls ’nc‘ in der while-Schleife. Hier versucht das Skript, mit dem Befehl nc eine Verbindung zum Port 1234 herzustellen, und gibt eine Nachricht im anderen Terminal aus, wenn eine Verbindung hergestellt werden kann. Sie müssen ein anderes Terminalfenster oder eine andere Registerkarte öffnen, um den Befehl ’nc localhost 1234′ auszuführen, um eine Verbindung herzustellen. Nach dem Herstellen der Verbindung kann jede Nachricht von einem Terminal zu einem anderen Terminal übertragen werden.

#!/bin/bash
echo „Abhören von Port 1234 …“
# Lesen Sie die von netcat an Port 1234 übergebene Nachricht
beim Lesen von Text
do
# Beenden Sie die Schleife, wenn die empfangene Nachricht „quit“ lautet
if ; then
echo „Bye“
break
else
echo „$text“
fi
# Nachricht drucken, wenn der Port verbunden ist
fertig < <((printf „Willkommen.\ r \ ngeben Sie eine Nachricht ein:“) / nc -l 1234)

Ausgang:

Führen Sie das Skript in einem Terminal aus, um das Abhören am Port 1234 zu starten.

$ bash loop28.sh

Öffnen Sie als Nächstes ein anderes Terminal und führen Sie den folgenden Befehl aus, um mit dem ersten Terminal

zu kommunizieren.

$ nc localhost 1234

Im zweiten Terminal wird eine Begrüßungsnachricht angezeigt. Wenn der Benutzer etwas in das zweite Terminal eingibt, wird es im ersten Terminal angezeigt. Wenn der Benutzer im zweiten Terminal ‚quit‘ eingibt, wird das Skript beendet, indem im ersten Terminal die Meldung ‚Bye‘ angezeigt wird.

Nach oben gehen

Ping-URL mit einer Schleife

Sie können herausfinden, ob eine Website aktiv ist oder nicht, indem Sie den Befehl ‚ping‘ mit der URL der Website ausführen. ‚ping‘ Befehl wird verwendet mit ‚google.com ‚ im folgenden Beispiel, um zu überprüfen, ob die Internetverbindung funktioniert oder nicht. While Schleife wird 5 Mal im Skript iterieren und versuchen zu pingen google.com. Wenn der Server antwortet, wird „Das Internet funktioniert“ gedruckt und die Schleife beendet. Wenn die Schleife 5 Mal iteriert und keine Serverantwort erhält, wird „Keine Internetverbindung“ ausgegeben.

#!/bin/bash
# Setze den Zähler
count=5
while ]
do
# Versuche zu pingen google.com
ping -c 1 google.com
c=$?
# Überprüfen Sie den Statuscode
if ]
then
echo „Das Internet funktioniert“
exit 0
fi
# Dekrementieren Sie den Zähler
((count–))
done
echo „Keine Internetverbindung“

Ausgang:

Führen Sie das Skript aus.

$ bash loop29.sh

Sie erhalten eine ähnliche Ausgabe, wenn Ihre Internetverbindung ordnungsgemäß funktioniert.

Nach oben gehen

Top im Batch-Modus mit einer Schleife ausführen und Ausgabe aufzeichnen

Der Befehl ‚top‘ ist ein Linux-Verwaltungstool, mit dem die Verwendung von Systemressourcen untersucht, verschiedene Aufgaben verwaltet und laufende Prozesse überwacht werden. Wie Sie den Befehl ‚top‘ im Batch-Modus mit der for-Schleife ausführen und die Datensätze in einer Textdatei speichern können, wird im folgenden Beispiel gezeigt. Hier wird die Option -b verwendet, um den Befehl ‚top‘ im Stapelmodus zu starten, und die Option -p wird verwendet, um die Prozess-ID festzulegen, die Sie überwachen möchten. Die Ausgabe des Befehls ‚top‘ wird in output gespeichert.txt-Datei.

#!/bin|bash
# Schleife iteriert 5 mal und führt den Befehl top
für ((i=0; i<5; i++))
do
top -b -p 2875 -n1 / tail -1 >> Ausgabe aus.txt
done

Output:

Führen Sie zunächst den folgenden Befehl aus, um die Liste der laufenden Prozesse zu finden.

$ ps

Führen Sie nun das Skript aus.

$ bash loop30.sh

Führen Sie den folgenden Befehl aus, um die Skriptausgabe anzuzeigen.

$ katze ausgang.txt

Zum Anfang

Fazit

Schleifen können in bash auf verschiedene Arten verwendet werden, um verschiedene Arten einfacher oder komplexer Aufgaben auszuführen. Wie drei Arten von Schleifen in bash für verschiedene Aufgaben wie das Abrufen von Listen oder Arrays, das Lesen von Dateien oder eine beliebige Befehlsausgabe usw. verwendet werden können. werden in diesem Artikel anhand sehr einfacher Beispiele gezeigt. Ich hoffe, diese Beispiele werden dem Leser helfen, die Verwendung der Bash-Schleife klarer zu verstehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

More: