Shell-Scripting, insbesondere Bash-Scripting, ist eine großartige Möglichkeit, sich wiederholende oder langwierige Aufgaben auf Ihren Systemen zu automatisieren. Warum tippen, wenn Sie Skripte freihändig planen und ausführen können? Eines der vielen Skriptkonstrukte ist die Schleife. Eine Schleife ist ein Codeabschnitt, der Daten aufnimmt oder generiert und dann eine Operation an den Daten durchführt und dann den Prozess erneut beginnt, bis eine Bedingung erfüllt ist, das Skript unterbrochen wird oder die Eingabedaten erschöpft sind. Wenn Sie Bash-Scripting verwenden, ist es manchmal nützlich, Aktionen mithilfe einer Form von Schleifen auszuführen.
[Leser mochten auch: Fünf Wege zur Verwendung von Weiterleitungsoperatoren in Bash]
Die grundlegenden Schleifenbefehle in Bash-Skripten sind for
und while
.
for
Schleifen werden normalerweise verwendet, wenn Sie eine bekannte, endliche Liste haben, z. B. eine Reihe von Zahlen, eine Liste von Elementen oder Zähler.while
Schleifen können mit Listen verwendet werden, sind aber auch für Bedingungen nützlich, die dies nicht tun haben eine bekannte Grenze. Sie können es verwenden, um Befehle während auszuführen eine Bedingung wahr ist (oder die Logik umkehren und ausführen, während die Bedingung falsch ist).
Obwohl es (Wortspiel beabsichtigt) verschiedene Möglichkeiten gibt, Schleifen auszuführen, konzentriere ich mich in diesem Artikel auf Beispiele, die while
verwenden Schleifen.
1. Eine einfache While-Schleife
Stellen Sie sich vor, Sie installieren eine riesige Anwendung und befürchten, dass sie möglicherweise zu viel Speicherplatz im Dateisystem belegt.
Statt df
auszuführen In einem separaten Terminal können Sie einen einfachen Befehl ausführen, um die Festplattenauslastung jede Sekunde zu überwachen. Auf diese Weise können Sie den Installationsvorgang unterbrechen, wenn Sie sehen, dass dieses Limit erreicht wird.
while true
do
df -k | grep home
sleep 1
done
In diesem Fall führen Sie die Schleife mit einem true aus Bedingung, was bedeutet, dass es für immer ausgeführt wird oder bis Sie CTRL-C. drücken Daher müssen Sie es im Auge behalten (andernfalls werden die Ressourcen des Systems weiterhin verwendet).
Hinweis :Wenn Sie eine Schleife wie diese verwenden, müssen Sie einen Befehl wie sleep
einfügen um dem System zwischen den Ausführungen etwas Zeit zum Atmen zu geben. Das ununterbrochene Ausführen von irgendetwas könnte zu einem Leistungsproblem werden, insbesondere wenn die Befehle innerhalb der Schleife E/A-Operationen beinhalten.
2. Warten, bis eine Bedingung wahr wird
Es gibt Variationen dieses Szenarios. Sie wissen beispielsweise, dass der Prozess irgendwann ein Verzeichnis erstellen wird, und Sie warten nur auf diesen Moment, um andere Validierungen durchzuführen.
Sie können eine while
haben Schleife, um die Existenz dieses Verzeichnisses zu prüfen und nur dann eine Nachricht zu schreiben, wenn das Verzeichnis nicht existiert.
Wenn Sie etwas Ausgefeilteres tun möchten, können Sie ein Skript erstellen und einen deutlicheren Hinweis darauf zeigen, dass die Schleifenbedingung wahr wurde:
#!/bin/bash
while [ ! -d directory_expected ]
do
echo "`date` - Still waiting"
sleep 1
done
echo "DIRECTORY IS THERE!!!"
3. Verwenden einer While-Schleife zum Manipulieren einer Datei
Eine weitere nützliche Anwendung eines while
Schleife besteht darin, sie mit dem read
zu kombinieren Befehl, um schnell auf Spalten (oder Felder) aus einer Textdatei zuzugreifen und einige Aktionen mit ihnen auszuführen.
Im folgenden Beispiel wählen Sie einfach die Spalten aus einer Textdatei mit einem vorhersagbaren Format aus und drucken die Werte, die Sie verwenden möchten, um /etc/hosts
zu füllen Datei.
Hier wird davon ausgegangen, dass die Datei Spalten hat, die durch Leerzeichen oder Tabulatoren getrennt sind, und dass es keine gibt Leerzeichen im Inhalt der Spalten. Das könnte den Inhalt der Felder verschieben und Ihnen nicht das geben, was Sie brauchen.
Beachten Sie, dass Sie nur eine einfache Operation ausführen, um Informationen zu extrahieren und zu manipulieren, und sich nicht um die Wiederverwendbarkeit des Befehls kümmern. Ich würde dies als einen dieser "schnellen und schmutzigen Tricks" einstufen.
Wenn Sie dies natürlich wiederholt tun würden, sollten Sie es von einem Skript aus ausführen, richtige Namen für die Variablen verwenden und all diese bewährten Verfahren (einschließlich der Umwandlung des Dateinamens in ein Argument und der Definition, wohin die Ausgabe gesendet werden soll, aber heute ist das Thema while
Schleifen).
#!/bin/bash
cat servers.txt | grep -v CPU | while read servername cpu ram ip
do
echo $ip $servername
done
[ Lernen Sie die Grundlagen der Verwendung von Kubernetes in diesem kostenlosen Spickzettel. ]
Abschluss
while
Schleifen sind nützlich in Skripts, die davon abhängen, ob eine bestimmte Bedingung wahr oder falsch ist, aber Sie können sie auch interaktiv verwenden, um eine Bedingung zu überwachen.
Die wichtigsten Dinge, die Sie sich merken sollten, sind:
Machen Sie sich immer klar, was die Bedingung für das Ende ist die Schleife. Wenn das etwas ist, von dem Sie erwarten, dass Sie es selbst mit CTRL-C erledigen , dann behalten Sie Ihren Befehl im Auge. Denken Sie darüber nach wie schnell Sie möchten, dass jeder Schleifenzyklus wiederholt wird. Wenn Sie eine Operation ausführen, die E/A innerhalb der Schleife beinhaltet, wird dies zu einem kritischen Aspekt der Planung.
In diesem Sinne viel Spaß while
du kannst.