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

Bash-Scripting Teil 2 – For- und While-Schleifen mit Beispielen

Im ersten Teil dieses Bash-Skripting-Tutorials haben wir besprochen, wie man ein Bash-Skript schreibt. Wir haben die verschiedenen Verwendungen und einzigartigen Szenarien untersucht, in denen Bash-Skripte nützlich sein können, und ein großartiges Beispiel dafür gegeben, wie unglaublich sie sein können.

In diesem Teil des Tutorials werfen wir einen Blick auf for Befehl und das while Befehl. Wir zeigen, wie wir diese Befehle verwenden können, um Schleifen zu erstellen, um eine Reihe von Werten zu durchlaufen.

Die For-Schleife

In Linux verwenden wir eine Schleife, um Befehle in einem bestimmten Intervall wiederholt auszuführen. Schleifen werden in einer Vielzahl von Programmiersprachen für denselben Zweck verwendet.

Es gibt mehrere verschiedene Arten von Schleifen in Linux, aber in diesem Abschnitt des Artikels konzentrieren wir uns auf for Schleife.

#!/bin/bash

 for y in a b c d w x y z 

> do

> echo $y

done

Wie Sie im obigen Screenshot sehen können, haben wir die „y“-Variable – die nur ein bedeutungsloser Platzhalter ist, der für den Befehl verwendet wird – einigen Buchstaben des Alphabets zugeordnet.

Wir haben diese Variable dann an echo übergeben Befehl, und es war in der Lage, unsere Buchstaben unten auszugeben.

Iteration über einfache Werte

Wir können den for verwenden Befehl in einem Bash-Skript. Dazu müssen wir zunächst eine Textdatei in unserem Linux-Terminal erstellen. Sie können den touch verwenden Befehl zum einfachen Erstellen von Textdateien.

$ touch script

Die obige Syntax erstellt eine Textdatei, die wir „Skript“ nennen. Bitte stellen Sie sicher, dass Sie Ihre Textdatei mit dem .sh erstellen Dateierweiterung. Beim Erstellen von script , möchten wir in unserem eigentlichen Skript bearbeiten, das den for enthält Befehl.

Wir können dies erreichen, indem wir ein paar verschiedene Befehle zum Bearbeiten von Textdateien ausführen, wie z. B. nano Befehl und das vi Befehl usw.

Wir empfehlen jedoch, einfach nano zu verwenden , da es einer der einfachsten und benutzerfreundlichsten Befehlstexteditoren in Linux ist.

$ nano script

Die obige Syntax öffnet unser script im Nano-Texteditor. Hier möchten wir unser Skript eingeben.

Beachten Sie, dass diese Textdatei #!/bin/bash enthalten muss , das das Bash-Skript darüber informiert, welche Shell verwendet werden soll, und somit eine zentrale Komponente für die erfolgreiche Erstellung eines Bash-Skripts ist.

#!/bin/bash

for var in first second third fourth fifth; do

	echo The $var item

done

Iteration über komplexe Werte

Im vorherigen Beispiel haben wir gezeigt, wie man for verwendet Befehl zum Durchlaufen einfacher Werte in einem benutzerdefinierten Bash-Skript. Das Wort einfach bezieht sich hier auf Werte, die nur ein einziges Wort enthalten.

Aber manchmal haben Sie eine Liste, die – anstelle von dem, was wir im vorherigen Beispiel mit „first“ gesehen haben – etwas in der Art von „the first“ enthält, das zufällig mehr als ein Wort für einen einzelnen Wert enthält. Diese Werte nennen wir „komplexe“ Werte.

Wenn Ihre Liste diese komplexen Werte enthält, müssen Sie darauf verweisen, indem Sie sie in Anführungszeichen setzen, damit das Skript versteht, dass es sich nur um einen Wert handelt.

#!/bin/bash

for var in first "the second" "the third" "I’ll do it"; do

	echo "This is: $var"

done

Befehlsersetzung

Wir können auch die Befehlsersetzung in unserem for verwenden Befehl in unserem Bash-Skript.

#!/bin/bash

my_file="file01"

for var in $(cat $my_file); do

        echo " $var"

done

Hier haben wir die Befehlssubstitution mit einer Bash-Subshell verwendet, wie die Verwendung des cat-Befehls innerhalb von $( ) zeigt; Dadurch können wir die Ausgabe von cat verwenden Befehl und erhalte den Inhalt der Datei unter der Annahme, dass jede Zeile ein Wort enthält.

Wenn jedoch in einer dieser Zeilen Leerzeichen vorhanden sind, wird jedes Wort als Feld betrachtet. In diesem Fall müssen Sie die Shell anweisen, neue Zeilen als Trennzeichen statt Leerzeichen zu behandeln.

Der Feldtrenner

Standardmäßig werden die folgenden Zeichen von der Bash-Shell als Felder betrachtet.

  • Leerzeichen
  • Tab
  • neue Zeile

Wenn Ihr Text eines dieser Zeichen enthält, geht die Shell davon aus, dass es sich um ein neues Feld handelt, und Sie müssen das interne Feldtrennzeichen oder die IFS-Umgebungsvariable ändern, wenn Sie diese Zeichen verwenden müssen.

$ IFS=$’n’

Die obige Syntax bewirkt, dass die Bash-Shell neue Zeilen als Trennzeichen statt als Leerzeichen betrachtet.

#!/bin/bash

file="/etc/passwd"

IFS=$'n'

for var in $(cat $file); do

	echo " $var"

done

Sie können den Feldtrenner auch mit IFS an Doppelpunkte zuweisen wie unten gezeigt.

$ IFS=:

Ziemlich fantastisch, oder?

Iteration über Verzeichnisdateien

Sie können auch den for verwenden Schleife in einem Bash-Skript, um die Dateien in Ihrem Home-Verzeichnis aufzulisten.

#!/bin/bash

for obj in /home/ubuntu/*; do

	if [ -d "$obj" ]; then

		echo "$obj is a folder"

	elif [ -f "$obj" ]; then

		echo "$obj is a file"

	fi

done

Dieser Prozess erfordert, dass Sie den if verwenden Anweisung zum Überprüfen von Dateien und Ordnern. Aber das sollte für Sie kein großes Problem darstellen, wenn Sie den vorherigen Beitrag gelesen haben. Aber wenn Sie zufällig eine Auffrischung benötigen, würde ich empfehlen, sie zu lesen.

Wir haben in unserem Bash-Skript einen Platzhalter namens Stern (*) verwendet, der einen for enthält -Schleife, mit der wir die Dateien und Ordner in unserem Home-Verzeichnis auflisten können. Beim Bash-Scripting wird dieser Vorgang als „File Globbing“ bezeichnet .“ File Globbing bedeutet alle existierenden Dateien mit einem Namen.

Beachten Sie, dass die Variablen in unserem if -Anweisung werden in Anführungszeichen geschrieben, da die Datei- oder Ordnernamen Leerzeichen enthalten können. Hätten wir diesen Schritt ausgelassen, hätten wir möglicherweise nicht alle Dateien und Verzeichnisse auflisten können.

Über Dateizeilen iterieren

Wir können den for verwenden Schleife in einem Bash-Skript, um den Dateiinhalt zu durchlaufen:

#!/bin/bash

IFS=$'n'

for text in $(cat /etc/passwd); do

	echo "This line $text ++ contains"

	IFS=:

	for field in $text; do

		echo " $field"

	done
done

Hier haben wir zwei Schleifen, die erste Schleife iteriert über die Zeilen der Datei, und das Trennzeichen ist die neue Zeile, die zweite Iteration ist über die Wörter in der Zeile selbst, und das Trennzeichen ist der Doppelpunkt :

Dateidaten

Sie können diese Idee anwenden, wenn Sie eine CSV-Datei oder eine Datei mit kommagetrennten Werten haben. Die Idee ist dieselbe; Sie müssen nur das Trennzeichen an Ihre Bedürfnisse anpassen.

Für Loop C-Style

Wenn Sie mit der Sprache C vertraut sind, werden Sie vielleicht bemerken, dass etwas an for nicht stimmt Schleifen in Linux manchmal.

Dies liegt daran, dass es zwei Möglichkeiten gibt, for zu schreiben Schleifen; der Standard-Linux-Weg, den wir bereits am Anfang dieses Tutorials behandelt haben, und der „C-Stil“-Weg.

for (var= 0; var < 5; var++)

{

printf(“number is %dn”, var);

}

Die obige Syntax gilt für for Schleife in C geschrieben. Der C-Stil for loop in Linux ist sehr ähnlich geschrieben, mit ein paar kleinen Änderungen, die unten beobachtet werden können.

for (( Variable =Start; Bedingung; Iterationsschritt))

for (( var = 1; var < 5; var++ ))

Um das Bild besser zu zeichnen, fügen wir ein Bash-Beispielskript ein, das den C-Stil for verwendet Schleife in unserem Linux-Terminal.

#!/bin/bash

for ((var = 1; var <= 10; var++)); do

	echo "number is $var"

done

Fügen Sie dies in unsere Textdatei ein und starten Sie es.

Der Fortsetzungsbefehl

Die Bash continue command ignoriert die Befehle innerhalb der äußeren Schleife für die aktuelle Iteration und übergibt die Kontrolle an die nächste. Sie können diesen Befehl verwenden, um die Ausführung der verbleibenden Befehle innerhalb einer Schleife zu stoppen, ohne die Schleife zu verlassen.

In den nächsten Beispielen sehen wir uns an, wie dieser Befehl in Bash-Skriptschleifen unter Linux verwendet werden kann.

Der Break-Befehl

Sie können den break-Befehl verwenden, um jede Schleife zu verlassen, wie die While- und die Until-Schleifen.

#!/bin/bash

for number in 10 11 12 13 14 15; do

	if [ $number -eq 14 ]; then

		break

	fi

	echo "Number: $number"

done

Die Schleife läuft, bis sie 14 erreicht, dann verlässt der Befehl die Schleife.
Wir werden etwas später auf einige weitere Beispiele für diesen Befehl eingehen.

Die While-Schleife

Die for-Schleife ist nicht die einzige Möglichkeit zum Schleifen in Bash-Skripten. Das while loop erledigt die gleiche Aufgabe, prüft jedoch vor jeder Iteration auf eine Bedingung. Die Struktur von while Schleife ist unten zu sehen.

while [ condition ]

do

    commands

done

Wir stellen ein Beispiel mit einem Bash-Skript bereit.

#!/bin/bash

number=10

while [ $number -gt 4 ]; do

	echo $number

	number=$(($number - 1))

done

Die Funktionsweise dieses Bash-Skripts ist einfach; es beginnt mit dem while Befehl, um zu überprüfen, ob die Zahl größer als Null ist, dann wird die Schleife ausgeführt und der Zahlenwert wird jedes Mal um 1 verringert. Bei jeder Schleifeniteration gibt das Skript den Wert der Zahl aus. Die Schleife wird ausgeführt, bis diese Zahl 0 erreicht.

Verschachtelte Schleifen

Sie können Schleifen innerhalb anderer Schleifen erstellen, wie while Schleife zum Beispiel. Diese Schleifen innerhalb einer Schleife werden als verschachtelte Schleifen bezeichnet. Wir werden in diese eintauchen, indem wir zuerst untersuchen, wie man einen verschachtelten for erstellt Schleife im folgenden Beispiel.

Mehrere for-Schleifen (verschachtelt for)

In den bisherigen Beispielen in diesem Tutorial haben wir gezeigt, wie man for erstellt Schleifen in einem Bash-Skript unter Linux. Aber es gibt auch etwas, das wir verschachteltes for nennen Schleifen. Dies sind Schleifen innerhalb anderer Schleifen oder einfach mehrere Schleifen, um es einfach auszudrücken.

Wir zeigen Ihnen ein einfaches Beispiel dafür, wie das aussieht, zusammen mit einer kurzen Untersuchung und Beschreibung weiter unten.

for y in a b c d e f

do

    for u in a b c d e f

    do

        echo "$y$u"

    done

done

Wie Sie im obigen Screenshot sehen können, lautet die Ausgabe, die wir beim Ausführen unseres Skripts im Linux-Befehlszeilenterminal erhalten, wie folgt:unser Beispieltext in jedem for Schleife ist „a b c d e f“.

Unser Skript wiederholt den Text in der äußeren Schleife neben dem Text aus der inneren Schleife.

Das Skript gibt weiterhin das erste Feld (in diesem Fall Leerzeichen, wir erklären das etwas später) des Textes in der äußeren Schleife aus, bis alle in der inneren Schleife enthaltenen Felder ausgegeben wurden.

Nach Abschluss der Ausgabe der inneren Schleife beginnt unser Bash-Skript mit der Ausgabe des folgenden Textfelds in der äußeren Schleife.

Dieser gesamte Vorgang wird wiederholt, bis jedes Feld jeder Schleife vollständig in der Ausgabe in Ihrem Linux-Terminal gedruckt wurde.

Mehrere While-Schleife (verschachteltes While)

Wie das verschachtelte for Befehlsschleifen gibt es auch verschachtelte while Befehlsschleifen. Diese funktionieren genauso wie die verschachtelten Schleifen für for Befehl; eine Schleife innerhalb einer anderen Schleife.

Die folgende Syntax hat eine verblüffende Ähnlichkeit mit dem regulären while Schleife als Struktur eines verschachtelten while Schleife ist einfach eine erweiterte Form der Basis while Schleife, die in der folgenden Syntax beobachtet werden kann.

while [condition]

do 

  statements1 

  statements2

  while [condition]

do

  continue

done

  statements3

done

Die obige Syntax führt bestimmte Aufgaben aus, bis die von Ihnen ausgewählten Bedingungen erfüllt sind. Das nennt man Schleife. Da die Schleife im obigen Beispiel jedoch verschachtelt ist, bedeutet dies, dass eine der oben erwähnten Aufgaben selbst eine weitere Schleife ist.

While Next

Wir haben gezeigt, wie das while Schleife und den for Schleife kann sehr nützlich sein, um komplexe Prozesse mit Bash-Skripten unter Linux auszuführen.

Aber manchmal müssen Sie aus verschiedenen Gründen eine der Schleifen in Ihrem Bash-Skript beenden. Dieses Szenario, so brutal es auch klingen mag, tritt häufig bei der Arbeit der Systemadministration auf. Vielleicht möchten Sie sich also mit diesem Konzept vertraut machen.

In der Bash-Shell der break Befehl und den continue Der Befehl kann die notwendigen Tools zum Steuern des Flusses Ihrer Bash-Skriptschleifen bereitstellen.

Wir zeigen, wie diese Befehle einzeln mit ein paar Beispielen unten funktionieren.

Die Syntax für die Verwendung des brea Befehl zum Beenden eines while Schleife ist wie folgt:

$  while [ condition ]
do
    commands
continue
done

Der continue Befehl break Befehle arbeiten sehr ähnlich und können als Gegensätze betrachtet werden; continue Der Befehl funktioniert genauso wie der break Befehl, nur setzt es die Schleife fort, anstatt sie zu beenden.

While-Schleife verlassen

Die break beendet die aktuelle Schleife und übergibt die Kontrolle an den nächsten Befehl, der dieser Schleife folgt. Sie können diesen Prozess verwenden, um Schleifen wie for zu verlassen ,while usw. Die Syntax des break Befehl lautet wie folgt:

$ while [ condition ]
do
    commands
break
done

Aber wie oben erwähnt, beide continue Befehl und den break Der Befehl kann neben while auch für andere Bash-Skriptschleifen verwendet werden Schleife. Wir zeigen, wie man sie im for verwendet Schleife.

For-Schleife verlassen

Sie können diese Schleifensteuerungsbefehle in einem for verwenden Schleife. Wir verwenden den break Befehl zum Verlassen des for Schleife in unserem Bash-Skript.

#!/bin/bash

for number in 10 11 12 13 14 15; do

	if [ $number -eq 14 ]; then

		break

	fi

	echo "Number: $number"

done

Der for Schleife läuft, bis sie die Zahl erreicht, die wir im Bash-Skript angegeben haben, nämlich 14. Beim Erreichen unserer angegebenen Zahl wird der break Der Befehl beendet den for Schleife.

Break If-Anweisung

Wir haben gerade gezeigt, wie wir break verwenden können Befehl zum Beenden von for Schleifen, aber wir können diesen Befehl auch verwenden, um if zu verlassen -Anweisung innerhalb dieser Bash-Skriptschleifen.

i=0

while [[ $i -lt 10 ]]

do

  echo "Number: $i"

  ((i++))

  if [[ $i -eq 5 ]]; then

    break

  fi

done

Anweisung fortsetzen

Wir machen dasselbe wie im vorherigen Beispiel mit dem continue Befehl, wie wir es mit dem break getan haben Befehl in einem while Schleife in einem Bash-Skript.

i=0

while [[ $i -lt 10 ]]; do

  ((i++))

  if [[ "$i" == '5' ]]; then

    continue

  fi

  echo "Number: $i"

done

Abschlussgedanken

Ich hoffe, Sie haben ein oder zwei neue Dinge gelernt. Oder zumindest hoffe ich, dass Sie überprüfen konnten, was Sie bereits wissen. Meine letzten Worte heute für Sie wären, weiter zu lesen und zu üben.

Danke.


Linux
  1. Bash HereDoc Tutorial mit Beispielen

  2. Bash For Loop Guide und Beispiele

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

  4. Beispiele für Bash-For- und While-Schleifen

  5. '&&' vs. '&' mit dem 'test'-Befehl in Bash

Bash-Scripting – For-Schleife mit Beispielen erklärt

Bash Scripting – Funktionen mit Beispielen erklärt

Bash-Scripting – Variablen mit Beispielen erklärt

Bash-Scripting – Printf-Befehl mit Beispielen erklärt

Bash-Scripting – Assoziatives Array mit Beispielen erklärt

Bash For-Schleifen mit Beispielen