
Die meisten Programmiersprachen unterstützen mehrere Alternativen zum Schleifen von Codezeilen. Bash unterstützt nativ 'while'-Schleifen, Schleifen 'up’ und die "for-Schleifen"’ wohlbekannt. Dieser Beitrag präsentiert und analysiert die drei.
Welche sind Bash-Loops?
Um das etwas besser einzustellen, wir sollten mit der frage beginnen was sind schleifen. Schleifen sind eine Konstruktion der Programmiersprache, die es einem Entwickler ermöglicht, zu wiederholen (Mit anderen Worten, wiederholen) bestimmte Teile, das Ganze, des Codes innerhalb dieser Schleifendefinition. Jetzt ist es einfach einzustellen Bash-Loops wie jedes Schleifen-Programmiersprachenkonstrukt, das in der bash verwendet wird!
Bash unterstützt nativ 'for'-basierte Schleifen, 'bis um’ y 'während'. Jedes davon hat seine eigenen Vorteile, aber man kann sich schon eine Vorstellung von deren Bedeutung machen, wenn man sich die Redewendung des Hauptwortes anschaut. Als Beispiel, 'bis um’ führt dazu, dass man natürlich daran denkt, etwas zu tun, bis’ und das ist, was Bash-Loops 'bis' tun; eine bestimmte Menge Code wiederholen (das Ganze) bis eine bestimmte Bedingung erfüllt ist.
Äquivalent, los bucles 'während’ sie laufen weiter, bis eine Bedingung nicht mehr zutrifft. Beenden, die "for-Schleifen"’ werden wiederholt, als Beispiel, eine definierte Anzahl von Malen, gleichbedeutend damit, wie wir 'für . schreiben würden 70 mal, machen…'. Dies hilft uns, die einzigartigen Funktionen, die jede Schleife bietet, logisch zu verstehen und besser lesbaren Code zu implementieren..
zum Basierte Bash-Loops
Für die Zwecke dieses Beitrags, wir werden die neueste einstellung sehen Bash für Loops. Eine etwas ältere und weniger moderne Definition von zum Schleifen in Bash Can, als Beispiel, sieht aus wie das: for i in $(seq 1 5); do echo $i; done
. Vergleichen wir das mit einem saubereren Look, besser strukturiert und moderner. zum Kreis:
zum ((i=1;ich<=5;ich++)); echo $i; getan
So einfach zum Einzeiler-Bash basierend auf (eine Definition, die oft in Linux-Kreisen verwendet wird / Bash, um ein Mini-Skript zu konzipieren, das in einer einzigen Zeile geschrieben ist) druckt die Nummern der 1 al 5 in sequentieller Reihenfolge. Wir setzen einen Startwert für die i
Variable ($i
) Wert zuweisen 1
das gleiche, als erster teil unserer zum Schleifendefinition, fertig von a ;
Trennzeichen.
Nächste, Wir geben an, dass wir nur einen zum Hochladen haben „Weniger als oder gleich fünf“’ durch Gebrauch i<=5
. Später geben wir an, was am Ende jeder Runde passieren soll, und das erhöht die Variable i
einzeln, Ö, in einer gebräuchlichen Verschlüsselungsabkürzung (in der C-Sprache enthalten ++, als Beispiel), das heißt übersetzt i++
.
Zum Abschluss spezifizieren wir den Anfang unseres Schleifencodes mit do
, Mit anderen Worten, nach Abschluss unserer for
Schleifendefinition, genau wie jede andere Aussage endet, mit ;
Vor do
. Außerdem spezifizieren wir das Ende unseres Schleifencodes mit done
und wir echo
(zu drucken) der Wert unserer Variablen ich zwischen do
Ja done
.
Beachten Sie auch ausdrücklich, dass die do
die Klausel selbst endet nicht mit ;
, und dies würde einen Fehler verursachen. Bedenke die do
ein Präfix für das, was zu tun ist, und es macht mehr sinn. Dies ist vielleicht einer der Gründe, warum es manchmal sauberer ist, Dinge in ein mehrzeiliges Skript zu schreiben, Angenommen do
Es kann nur das letzte Wort in einer Zeile sein.
Auch beim Einstellen anderer Loop-Typen, wir werden das weiterhin beibehalten do
Ja done
Klauseln, und wir werden immer sicherstellen, dass unsere Loop-Definition abgeschlossen ist (Mit anderen Worten, Vor do
) mit ;
, sowie das Ende jeder einzelnen Aussage innerhalb unserer do...done
Schleifendefinition mit ;
.
Lassen Sie uns dies in ein kleines Skript packen, um klarer zu sehen, wie die Dinge auf diese Weise funktionieren können.:
#!/bin/bash for ((i=1;ich<=10;i+=2)); do echo $i done
Nachdem Sie das Skript mit ausführbar gemacht haben chmod +x test.sh
, Wir führen das gleiche aus. Einige kleine Änderungen wurden am Skript vorgenommen. Beachten Sie, wie dieses Mal, Wir erhöhen die Variable i
jeweils für zwei. Dies geschieht mit einer anderen Kodierungsabkürzung, nämlich i+=2
was gelesen werden kann als erhöhen und in zwei. Du kannst auch schreiben i=i+2
Am gleichen Ort, und es funktioniert genauso.
Wir sehen, dass wir anfangen in 1und erhöhen in 2 Jedes Mal, wenn wir durch die Schleife gehen, endet in 9. Der Grund, warum es endet in 9 ist, dass der Maximalwert 10. So, nach 9 der nächste Wert wäre 11, was größer ist als 10 und deshalb wird es nicht angezeigt / Links.
Überlege auch wie ;
wurde nach der Echolinie entfernt. Dies liegt daran, dass es nicht erforderlich ist, das Ende einer Anweisung zu beenden, wenn stattdessen eine Situation vorliegt / Zeilenendezeichen. Das ist hier der Fall; wir haben keinen anderen Befehl nach dem echo $i
und die Zeile endet sofort (Leerzeichen am Ende der Zeile wären auch in Ordnung, Das Prinzip besteht darin, keinen weiteren Befehl zu haben, es sei denn, dieser neue Befehl hat das Präfix (und der vorherige ist fertig) zum ;
).
Wetter Basierte Bash-Loops
Nächste, Schauen wir uns eine Bash-Schleife an, das gleiche verwenden do...done
Schleifendefinition, wir können ein gründen während die Bash-basierte Schleife ausgeführt werden, solange eine gegebene Bedingung wahr ist.
i=1; während [ $zum 5 ]; echo $i; ich=$[ ich + 1 ]; getan
In diesem Beispiel, wir machen das gleiche wie unser erstes zum Beispiel für eine basierende Schleife. Obwohl die Definition komplexer erscheint (und deshalb einer zum loop kann für diesen speziellen Anwendungsfall besser geeignet sein), Es ist interessant zu sehen, wie wir ein Wetter Schleife auf die gleiche Weise.
Hier setzen wir zuerst unsere i
Variable, manuell, in einem separaten Befehl beendet durch ;
, damit 1. Nächste, wir haben angefangen Wetter Schleife, in der wir eine Bedingung setzen, in einer Weise sehr äquivalent zur Definition von a if
Stellungnahme (Am Ende dieses Beitrags befindet sich ein Link zu einem Beitrag über if
Aussagen für weitere Informationen), wo wir prüfen, ob die i
die Variable ist kleiner oder gleich (-le
) später 5.
Danach haben wir unsere häufige do...done
Block, in dem echo
unsere Variable, und folglich, in einer neuen Aussage, manuell, steigern den Wert unserer i
variabel um eins in einer mathematischen Berechnung gemäß der Definition von $[...]
Redewendungen für die Bash-Berechnung. Nächste, lass uns überprüfen bis auf Bash-Loop-basiert
bis um Basierte Bash-Loops
Bewaffnet mit dem, was wir bisher gelernt haben, jetzt können wir folgendes leichter untersuchen bis um Bash-Loop-basiert:
i=1; bis um [ $ich -gt 5 ]; echo $i; ich=$[ ich + 1 ]; getan
Hier suchen wir nach der Bedingung ich größer als 5 in Erfüllung gehen. Bis zu diesem Moment (Mit anderen Worten, ein bis um Schleife basierend auf), wir werden drucken (mit echo
) unsere Variable ich und erhöhe das gleiche um eins, wie unser vorheriges Wetter beispielbasiert.
Wir können sehen, wie die Syntax der bis um Befehl ist sehr äquivalent zu Wetter Befehl. Beachten Sie auch, dass, nicht wie for
befehlsbasiert, diese Befehle suchen nach a sicher Zustand bestehen bleiben (mit Wetter), oder für a sicher Bedingung zum Starten (mit bis um). Dadurch ist es auch möglich, andere Befehle zu verwenden, die eine Ausgabe zurückgeben können, die true entspricht / gefälscht, als Beispiel grep -q
:
Echo 1 > a
while grep -q '1' ./a; Echo 'Ja'; Schlaf 5; getan
Hier fügen wir die Nummer hinzu 1 in eine Datei mit dem Namen einund überprüfen Sie die Existenz der Nummer 1 innerhalb dieser Datei mit einem grep -q
(Ein stiller grep). Das tun wir auch weiterhin. (Mit anderen Worten Wetter) bis es nicht mehr wahr ist. Obwohl es wahr ist, wir drucken den Text Ja und pausieren Sie die Schleife für fünf Sekunden mit sleep 5
. Beachten Sie, wie jeder Befehl endet mit ;
wieder.
Nach ungefaehr 17 Sekunden, wir unterbrechen unser Skript mit STRG + c, Dies ist die universelle Methode, um eine laufende Prozedur in der bash zu stoppen (gleichzeitig mit der STRG + z Stärker und effektiver, als einen Vorgang sofort zu unterbrechen, Aber das ist für einen anderen Beitrag!)
Ende
In diesem Beitrag, wir überprüfen die 'for'-Schleifen, 'während’ und 'bis’ die nativ in Bash . verfügbar sind. Wenn du an mehr bash interessiert bist, schau dir bedingte Tests in bash an: wenn, dann, anders, elif- und bash-Funktionen und lokale Variablen.
Genießen!