GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Anfängerserie Nr. 8:Schleifen in Bash

Vorsicht vor Endlosschleifen!

Die Schleifenfähigkeit ist ein sehr mächtiges Feature des Bash-Skriptings. Schleifen haben eine Vielzahl von Anwendungsfällen.

In diesem Tutorial lernen Sie die drei verschiedenen Bash-Loop-Strukturen kennen. Sie lernen auch, wie Sie Schleifen verwenden, um Array-Elemente zu durchlaufen.

Außerdem lernen Sie, wie Sie Break- und Continue-Anweisungen verwenden, um Schleifen zu steuern, und schließlich lernen Sie, wie Sie Endlosschleifen erstellen.

For-Schleifen in Bash

For-Schleifen sind eine von drei verschiedenen Arten von Schleifenstrukturen, die Sie in Bash verwenden können. Es gibt zwei verschiedene Arten, eine for-Schleife zu schreiben.

  • For-Schleifen im C-Stil
  • Verwendung einer for-Schleife für eine Liste/eine Reihe von Elementen

For-Schleifen im C-Stil in Bash

Wenn Sie mit einer C- oder C++-ähnlichen Programmiersprache vertraut sind, werden Sie die folgende For-Schleifen-Syntax erkennen:

for ((initialize ; condition ; increment)); do
[COMMANDS]
done

Unter Verwendung der oben erwähnten Syntax im C-Stil gibt die folgende for-Schleife zehnmal „Hallo Freund“ aus:

for ((i = 0 ; i < 10 ; i++)); do
	echo "Hello Friend"
done

Die for-Schleife hat zuerst die Integer-Variable i initialisiert auf Null, dann testet es die Bedingung (i <10); wenn wahr, dann führt die Schleife die Zeile echo „Hello Friend“ aus und erhöht die Variablei um 1 , und dann läuft die Schleife immer wieder bis i nicht mehr kleiner als 10 ist .

[email protected]:~$ bash hello.sh 
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend

Liste/Bereich für Schleifen in Bash

Es gibt auch eine andere Syntaxvariante der for-Schleife, die besonders nützlich ist, wenn Sie mit einer Liste von Dateien (oder Strings), Zahlenbereichen, Arrays, der Ausgabe eines Befehls usw. arbeiten. Die Liste/Bereich-Syntax für die Schleife hat die folgende Form :

for item in [LIST]; do
[COMMANDS]
done

Beispielsweise macht die folgende for-Schleife genau dasselbe wie die for-Schleife im C-Stil, die Sie im vorherigen Abschnitt erstellt haben:

for i in {1..10}; do
	echo "Hello Friend"
done

Die var.sh Das folgende Skript gibt alle Dateien und Verzeichnisse aus, die unter /var vorhanden sind Verzeichnis:

#!/bin/bash

for i in /var/*; do
	echo $i 
done

Unten sehen Sie eine Beispielausgabe, wenn Sie das var.sh-Skript ausführen:

[email protected]:~$ ./var.sh
/var/backups
/var/cache
/var/crash
/var/lib
/var/local
/var/lock
/var/log
/var/mail
/var/metrics
/var/opt
/var/run
/var/snap
/var/spool
/var/tmp

While-Schleifen in Bash

Die While-Schleife ist eine weitere beliebte und intuitive Schleife, die Sie in Bash-Skripten verwenden können. Die allgemeine Syntax für eine While-Schleife lautet wie folgt:

while [ condition ]; do
[COMMANDS]
done

Zum Beispiel das folgende 3x10.sh Das Skript verwendet eine While-Schleife, die die ersten zehn Vielfachen der Zahl Drei ausgibt:

#!/bin/bash

num=1
while [ $num -le 10 ]; do
	echo $(($num * 3))
	num=$(($num+1))
done

Hier ist die Ausgabe des obigen Skripts:

[email protected]:~$ ./3x10.sh
3
6
9
12
15
18
21
24
27
30

Zuerst wurde dieZahl initialisiert Variable auf 1; dann läuft die While-Schleife so lange wie num kleiner oder gleich 10 ist . Innerhalb des Körpers der While-Schleife gibt der echo-Befehl num aus multipliziert mit drei und dann wird num erhöht um 1 .

Bis-Schleifen in Bash

Wenn Sie von einem C/C++-Hintergrund kommen, suchen Sie vielleicht nach einer do-while-Schleife, aber diese existiert nicht in bash.

Es gibt eine andere Art von Schleife, die in Bash existiert. Die until-Schleife folgt der gleichen Syntax wie die while-Schleife:

until [ condition ]; do
[COMMANDS]
Done

Der Hauptunterschied zwischen der until-Schleife und der while-Schleife liegt in der Testbedingung. Eine While-Schleife wird so lange ausgeführt, wie die Testbedingung wahr ist; Auf der anderen Seite läuft eine until-Schleife weiter, solange die Testbedingung falsch ist!

Beispielsweise können Sie ganz einfach 3x10.sh erstellen Skript mit einer until-Schleife statt einer while-Schleife; Der Trick dabei ist, die Testbedingung zu negieren:

#!/bin/bash

num=1
until [ $num -gt 10 ]; do
	echo $(($num * 3))
	num=$(($num+1))
done

Beachten Sie, dass die Negation der Testbedingung [ $num -le 10 ]; ist [ $num -gt 10 ];

Mehr über Schleifen in Bash-Skripten

Nun, da Sie mit den Schleifen in den Bash-Skripten vertraut sind

Wenn Sie dieser Tutorial-Serie von Anfang an folgen, sollten Sie mit Arrays in Bash vertraut sein.

For-Schleifen sind oft die beliebteste Wahl, wenn es darum geht, über Array-Elemente zu iterieren.

Zum Beispiel die folgende prime.sh Das Skript iteriert jedes Element im Primzahl-Array und gibt es aus:

#!/bin/bash

prime=(2 3 5 7 11 13 17 19 23 29)
for i in "${prime[@]}"; do
	echo $i
done 

Dies ist die Ausgabe des prime.sh-Skripts:

[email protected]:~$ ./prime.sh
2
3
5
7
11
13
17
19
23
29

Break und Continue in Bash-Schleifen verwenden

Manchmal möchten Sie eine Schleife möglicherweise vorzeitig verlassen oder eine Schleifeniteration überspringen. Dazu können Sie die Break- und Continue-Anweisungen verwenden.

Die Break-Anweisung beendet die Ausführung einer Schleife und schaltet die Programmsteuerung auf den nächsten Befehl oder die nächste Anweisung nach der Schleife um.

Die folgende Schleife würde beispielsweise nur die Zahlen von eins bis drei ausgeben:

for ((i=1;i<=10;i++)); do
	echo $i
	if [ $i -eq 3 ]; then
		break
	fi
done

Sie können auch ein Weiter verwenden -Anweisung, um eine Schleifeniteration zu überspringen. Die Schleife wird fortgesetzt und wechselt zur nächsten Iteration, aber die Befehle nach den Continue-Anweisungen werden in dieser bestimmten Iteration übersprungen.

Zum Beispiel die folgende odd.sh Skript würde nur die ungeraden Zahlen von eins bis zehn ausgeben, da es alle geraden Zahlen überspringt:

#!/bin/bash
for ((i=0;i<=10;i++)); do
	if [ $(($i % 2)) -ne 1 ]; then
		continue
	fi
	echo $i
done

Hier ist die Ausgabe, die ungerade Zahlen ausgibt:

[email protected]:~$ ./odd.sh
1
3
5
7
9

Endlosschleifen in bash

Eine Endlosschleife ist eine Schleife, die ewig läuft; dies geschieht, wenn die Schleifentestbedingung immer wahr ist.

In den meisten Fällen sind Endlosschleifen das Produkt eines menschlichen logischen Fehlers.

Zum Beispiel könnte jemand, der eine Schleife erstellen möchte, die die Zahlen 1 bis 10 in absteigender Reihenfolge ausgibt, versehentlich die folgende Endlosschleife erstellen:

for ((i=10;i>0;i++)); do
	echo $i
done 

Das Problem ist, dass die Schleife die Variablei ständig erhöht um 1 . Um das Problem zu beheben, müssen Sie i++ ändern mit i-- wie folgt:

for ((i=10;i>0;i--)); do
	echo $i
done 

In einigen Fällen möchten Sie möglicherweise absichtlich Endlosschleifen erstellen, um darauf zu warten, dass eine externe Bedingung auf dem System erfüllt wird. Sie können ganz einfach eine unendliche for-Schleife wie folgt erstellen:

for ((;;)); do
	[COMMANDS]
done 

Wenn Sie stattdessen eine unendliche While-Schleife erstellen möchten, können Sie diese wie folgt erstellen:

while [ true ]; do
	[COMMANDS]
done

Fantastisch! Damit sind wir am Ende dieses Tutorials in der Bash Beginner Series angelangt. Ich hoffe, es hat Ihnen Spaß gemacht, in Bash herumzuschleifen!

Üben Sie nun das Schleifen mit einigen einfachen Übungen. Die Lösung erhalten Sie auch im PDF unten.

Bash-Kapitel-8-ÜbungsfragenProbleme und deren Lösung, um zu üben, was Sie gerade in diesem Kapitel gelernt habenBash-Kapitel-8-Übungsfragen-Linux-Handbuch.pdf28 KB

Sehen Sie sich das nächste Kapitel an, in dem Sie lernen, wie Sie Code in Ihren Bash-Skripten wiederverwenden, indem Sie Funktionen erstellen.


Linux
  1. Wie schreibe ich eine Schleife in Bash?

  2. Linux-Scripting:3 Anleitungen für While-Schleifen in Bash

  3. Bash-Anfängerserie Nr. 9:Verwenden von Funktionen in Bash

  4. RHCE Ansible Series #5:Ansible Loops

  5. Bash für Schleifenbeispiele

Bash-Anfängerserie Nr. 5:Verwenden von arithmetischen Operatoren in Bash-Skripten

Bash-Anfängerserie Nr. 4:Verwenden von Arrays in Bash

Bash-Anfängerserie Nr. 3:Übergabe von Argumenten an Bash-Skripte

Bash-Anfängerserie Nr. 7:Entscheidungsfindung mit If Else- und Case-Anweisungen

Bash-Anfängerserie Nr. 6:Zeichenfolgenoperationen in Bash

Bash-Anfängerserie Nr. 10:Automatisierung mit Bash