Um diesen Artikel zu verstehen, sollte der Leser bereits einfache Bash -Befehle kennen. Jeder in diesem Artikel verwendete nicht-einfache Bash-Befehl wird erläutert. Vergessen Sie nicht, dass BASH -Befehle in eine Textdatei geschrieben werden können und die Textdatei ausgeführt werden kann, indem der Name der Datei (vorangegangen werden vom Pfad) am Terminal eingeben und dann die Eingabetaste gedrückt wird. Vergessen Sie nicht auch, sich selbst zu erlauben, die Datei mit so etwas auszuführen:
sudo chmod +x programm_name
Artikelinhalt
Bash -Loop -Grundlagen
Bis/erledigte Schleife
Betrachten Sie den folgenden Code:
sei n = 0
bis ["$ n" -Eq 5]; Tun
echo $ n
((++ n))
Erledigt
Die Ausgabe ist:
0
1
2
3
4
Wenn das Programm beginnt, wird die Variable n deklariert und null zugewiesen. Die beiden Befehle vor „fertig“ werden fünfmal ausgeführt. ((++ n)) Inkremente N um 1 für jede Iteration. Beachten Sie die Positionen der reservierten Wörter "bis", "Do" und "Fertig". Die beiden Befehle werden wiederholt, bis die Bedingung ["$ n" -Eq 5] erfüllt ist. In diesem Zustand bedeutet „-eq“ „gleich“. Die Bedingung ist, dass der Wert von N gleich 5 ist. Beachten Sie, dass die wiederholten Werte von 0 bis 4 beginnen. Dies liegt daran, dass für jede Iteration der Zustand des Konstrukts überprüft wird, bevor der Körper (zwei Befehle) des Konstrukts ausgeführt wird. Wenn die Bedingung falsch ist, würde der Körper nicht ausgeführt werden. Das reservierte Wort „fertig“ sollte immer in eine neue Zeile eingegeben werden.
Die Syntax für die bis/fertiggestellte Schleife lautet:
bis Testkommanditen; konsequente Kommandos machen; Erledigt
Das zweite Semikolon ist nicht erforderlich, wenn das reservierte Wort „fertig“ in einer neuen Zeile eingegeben wird.
Wenn der Zustand mit Null verlässt, was wahr ist, wird der Körper der Schleife ausgeführt. Wenn die Bedingung mit einer Zahl größer als Null verlässt, was falsch ist, wird der Körper der Schleife nicht ausgeführt.
Bash während/erledigte Schleife
Diese Schleife ähnelt der bis/fertiggestellten Schleife, außer dass die Bedingung umformuliert werden muss. Beide Konstrukte verwenden das reservierte Wort „Do“. Der folgende Code erzeugt die gleiche Ausgabe wie zuvor:
sei n = 0
während ["$ n" -LT 5]; Tun
echo $ n
((++ n));
Erledigt
In der Bedingung im Code bedeutet "-lt" "weniger als". Die Syntax für die while/Done -Schleife lautet:
während Testkommanditen; konsequente Kommandos machen; Erledigt
Schleife verprügeln/erledigt
Es gibt zwei Syntax für die "für" -Schloops, die sind:
für ((expr1; expr2; expr3)); Befehle machen; Erledigt
Und
für den Namen [in [in [Wörtern…]]; ] Befehle machen; Erledigt
Der folgende Code verwendet die erste Syntax, um das gleiche Ergebnis zu erzielen, wie oben:
für ((n = 0; n) < 5; ++n)); do
echo $ n
Erledigt
In dem (zusammengesetzten Befehl initialisiert der erste Expression die Variable n bis Null. Der nächste Ausdruck ist der Bedingung. Der letzte Ausdruck im Befehl doppelter Klammern ist der Inkrementexpression. Dann gibt es den Körper, der aus mehr als einem Befehl bestehen kann, und dann „fertig“.
Die zweite Syntax wird am besten mit einem Array verwendet - siehe unten.
Bash -Break und Befehle fortsetzen
brechen
Alle Iterationen (wiederholte Ausführung des Körpers) für eine Schleife dürfen nicht unbedingt ausgeführt werden. Mit dem Befehl Break kann die verbleibenden Iterationen gestoppt werden. Im folgenden Code bleiben die Iterationen kurz nach n gleich 2.
für ((n = 0; n) < 5; ++n)); do
echo $ n
if ((n == 2)); Dann
brechen
fi
Erledigt
Die Ausgabe ist:
0
1
2
In dieser Schleife haben drei Iterationen stattgefunden.
weitermachen
Eine Iteration kann mit dem Befehl kontinuieren übersprungen werden. Der folgende Code zeigt dies:
für ((n = 0; n) < 5; ++n)); do
if ((n == 2)); Dann
weitermachen
fi
echo $ n
Erledigt
Die Ausgabe ist:
0
1
3
4
Die Iteration zum Anzeigen von 2 wurde übersprungen.
Die Bruch- und Fortsetzung Befehle können auch in der bis/erledigten und während/erledigten Schleifen verwendet werden.
Nützliche Schleifen Beispiele
bis/erledigte Schleife Beispiel
Der Befehl zum Erstellen einer leeren Textdatei wird berührt. Das folgende Skript erstellt leere Textdateien im aktuellen Arbeitsverzeichnis, bis die Anzahl der erstellten Dateien 4 beträgt:
lass i = 1
Datei = "myFile"
bis [$ i -eq 5]; Tun
Dateiname = "$ file $ i.txt"
Berühren Sie $ Dateiname
((++ i))
Erledigt
Die Namen der erstellten Dateien sollten MyFile1 sein.Txt, MyFile2.Txt, MyFile3.txt und myfile4.txt.
Das einzige Semikolon im Code kann weggelassen werden, wenn „Do“ in der nächsten Zeile eingegeben wird.
Während/Done -Schleife Beispiel
Der Befehl zum Erstellen eines leeren Verzeichnisses ist mkdir. Das folgende Skript erstellt leere Verzeichnisse im aktuellen Arbeitsverzeichnis, bis die Anzahl der erstellten Verzeichnisse 4 beträgt:
I = 1
Dir = "mydir"
während [$ i -lt 5]; Tun
DirName = "$ dir $ i" "
mkdir $ dirname
((++ i))
Erledigt
Der Name der erstellten Verzeichnisse sollte mydir1, mydir2, mydir3 und mydir4 sein.
Das einzige Semikolon im Code kann weggelassen werden, wenn „Do“ in der nächsten Zeile eingegeben wird.
Für Schleifenbeispiel
Die zweite Syntax für die oben erwähnte für die Schleife erwähnte LOOP ist:
für den Namen [in [in [Wörtern…]]; ] Befehle machen; Erledigt
Diese Syntax wird besser mit einer Liste verwendet. In einfachen Worten ist die Syntax:
für Variable in der Liste; Befehle machen; Erledigt
Die Liste kann ein Array sein. Der folgende Befehl liest eine Eingangszeile des Terminals in das Array arr:
Lesen Sie arr
Wenn das Skript ausgeführt wird, wird bei diesem Befehl (mit einem blinkenden Cursor), damit der Benutzer die Eingabe eingeben kann. Wenn der Benutzer typisiert:
eins zwei drei
In einer Zeile und Drücken der Eingabetaste hätte das erste Element des Arrays das Wort "eins", das zweite würde das Wort "zwei" haben und das dritte würde "drei" haben. Beachten Sie, dass die Eingangswerte durch Leerzeichen getrennt wurden.
Der folgende Code verwendet die zweite For-Loop-Syntax, um eine Eingabe für das Skript zu lesen und anzuzeigen:
Echo "Geben Sie Werte ein und drücken Sie die Eingabetaste:"
Lesen Sie arr
für var in $ arr; Tun
echo $ var
Erledigt
Wenn die Eingabe war:
eins zwei drei
Dann wäre die Ausgabe:
eins
zwei
drei
Das einzige Semikolon im Code kann weggelassen werden, wenn „Do“ in der nächsten Zeile eingegeben wird.
Bash -Select -Befehl
Der Befehl auswählen ist nicht wirklich eine Schleife. Es beinhaltet jedoch eine Iteration, die vom Programmierer nicht codiert wird. In einfachen Worten lautet die Syntax des Befehlsauswahl:
Wählen Sie Element in [Liste]
Tun
[Befehle]
Erledigt
Hier sind "Select", "in", "Do" und "Done" reservierte Wörter. Eine Verwendung des Befehls auswählen besteht darin, die Elemente aus der Liste zum Terminal anzuzeigen. Das folgende Skript zeigt dies:
Wählen Sie Artikel in Banane, Zitrone, Orange, Birne, Ananas
Tun
brechen
Erledigt
Beachten Sie die Verwendung des Break -Befehls. Die Ausgabe ist:
1) Banane,
2) Zitrone,
3) Orange,
4) Birne,
5) Ananas
#?
Die Liste besteht aus den Werten Banane, Zitrone, Orange, Birne und Ananas. Diese Werte wurden angezeigt und nummeriert. Das Symbol "#?”(Und der blinkende Cursor daneben) erwartet, dass der Benutzer etwas eingeben und die Eingabetaste drücken. Geben Sie alles ein, drücken Sie dann die Eingabetaste und beendet schließlich die Ausführung des Skripts.
Beachten Sie, dass die Liste als Menü, nummeriert, für die Ausgabe angezeigt wurde. Damit kann der Benutzer im Menü ein Element auswählen, indem die entsprechende Nummer neben „# eingeben“?”, Dann drücken Sie die Eingabetaste. Das folgende Skript zeigt, wie orange ausgewählt wird, indem die Nummer 3 eingeben:
Wählen Sie Artikel in Banane, Zitrone, Orange, Birne, Ananas
Tun
Echo $ Antwort
brechen
Erledigt
Die Ausgangsanzeige lautet:
#? 3
Dann
3
Abschluss
Eine Schleife in Bash ist ein Konstrukt; Ein Konstrukt ist ein zusammengesetzter Befehl. Der Körper des Konstrukts hat mindestens einen Befehl. Ab sofort hat Bash nur drei Schleifen, die bis/fertig sind, während/fertig und für/fertig. Jede Schleife verwendet das reservierte Wort "Do". Nach der Eingabe der Erkrankung sollte „Do“ von ';' vorausgehen oder in der nächsten Zeile des Codes eingegeben werden. Jede Schleife nimmt eine Bedingung an. Die bis/fertig und während der/erledigten Schleifen sind ähnlich. Der Hauptunterschied tritt bei der Codierung der Bedingung auf.
Der Befehl aus auswählen ist ein zusammengesetzter Befehl, aber es ist nicht wirklich eine Schleife. Damit kann der Benutzer ein Element aus einer Menüliste aus auswählen, wenn das Skript interaktiv ausgeführt wird.
Die Bruch- und Fortsetzung Befehle können in einer Schleife verwendet werden. Mit dem Befehl Break kann die Iterationen gestoppt werden. Andererseits kann mit dem Befehl weiterhin eine Iteration überspringen.
Das ist alles, was es gibt, um Schleifen zu verprügeln. Die verbleibende Funktion lautet: „Wie man die Bedingungen codiert?”. Dies verdient einen ganz anderen Artikel und kann nicht in diesem aufgenommen werden. Siehe den Artikel auf dieser Website mit dem Titel „Bash Conditionals ausführlich“, um die Bedingungen zu codieren.
Chrys