![]() |
|
||||||||||||||||||||
|
|||||||||||||||||||||
|
|||||||||||||||||||||
Hans-Georg Eßer
Manchmal muss man sich wiederholen, das gilt nicht nur für Gespräche, sondern auch für die Arbeit am Rechner. Wollen Sie einen Shell-Befehl mehrfach ausführen, können Sie die Shell im Auge behalten und nach jeder abgeschlossenen Bearbeitung [Pfeil hoch], [Eingabe] drücken, um den Befehl ein weiteres Mal auszuführen.
Wissen Sie aber schon vorher, dass die Shell die Aufgabe mehrfach ausführen soll, können Sie einfach eine kleine Schleife programmieren -- die passt bequem in eine Zeile.
Wollen Sie in einem Terminal-Fenster alle fünf Sekunden einen bestimmten Befehl befehl ausführen, schreiben Sie einfach eine while-Schleife: Solche Schleifen haben immer die Form
while bedingung; do befehl; done
Dabei ist bedingung auch ein Shell-Befehl, und abhängig davon, ob er erfolgreich oder erfolglos (d. h. mit einer Fehlermeldung) beendet wird, wird der Befehl hinter dem Schlüsselwort do ausgeführt und die Schleife erneut durchlaufen. "While" heißt auf Deutsch "während", das Kommando in der Bedingung muss darum erfolgreich beendet werden, damit die Shell der Befehl innerhalb der Schleife ausführt.
Eine Endlosschleife erzeugen Sie nun, indem Sie einfach eine Bedingung wählen, die immer erfüllt ist -- dafür gibt es das Programm true: Es macht nichts, und das stets erfolgreich. Damit haben Sie alles, was Sie benötigen:
while true; do clear; date; befehl; sleep 5; done
Diese Schleife kann man auch hübscher in mehrere Zeilen packen, um ihre Lesbarkeit zu verbessern:
while true do clear date befehl sleep 5 done
(Bei dieser Schreibweise im mehreren Zeilen können Sie auf die Semikolon-Zeichen als Befehlstrenner verzichten.)
Die Befehle clear und date stehen hier nur im Listing, um das Terminal vor dem eigentlichen Befehlsaufruf aufzuräumen und die aktuelle Zeit anzuzeigen. Nötig sind sie nicht.
Es gibt übrigens auch ein Standard-Unix-Tool, das genau eine solche Endlosschleife automatisch erzeugt; mit
watch -n5 "befehl"
hätten Sie das gleiche Resultat erreicht -- dabei aber nicht die Endlosschleife kennengelernt.
Soll die Schleife nicht unendlich oft laufen, sondern 50, 60 oder 70 mal, greifen Sie zu einer for-Schleife. Mit Hilfe des Befehls seq (sequence, dt. Folge) können Sie die Aufrufe sogar durchnummerieren:
for i in `seq 1 50`; do echo $i-ter Aufruf; befehl; done
Der seq-Befehl alleine würde einfach die Zahlen von 1 bis 50, jeweils in einer separaten Zeile, ausgeben. Über die umgekehrten einfachen Anführungszeichen ("Backticks") nimmt sich die Shell diese 50 Zahlen und fügt sie in den Befehl ein -- daraus wird also im ersten Schritt:
for i in 1 2 3 4 .... 50; do echo $i-ter Aufruf; befehl; done
Die for-Schleife geht nun durch alle Argumente (in diesem Fall die Zahlen 1 bis 50), weist der Variablen $i jeweils einen der Werte zu und führt die folgenden Befehle (zwischen do und done) aus -- zunächst also echo 1-ter Aufruf; befehl, dann echo 2-ter Aufruf; befehl usw. -- am Ende wurde der Befehl genau 50 mal abgearbeitet. (hge)
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.
Druckerfreundliche Version |
Feedback zu dieser Seite |
Datenschutz |
© 2012 Linux New Media AG |
Last modified: 2007-04-05 11:24
[Linux-Magazin]
[LinuxUser]
[Linux-Community]
[Admin-Magazin]
[Ubuntu User]
[Smart Developer]
[Linux Events]
[Linux Magazine]
[Ubuntu User]
[Admin Magazine]
[Smart Developer]
[Linux Magazine Poland]
[Linux Community Poland]
[Linux Magazine Brasil]
[Linux Magazine Spain]
[Linux Technical Review]