claim.gif
Linux Magazin Linux User Easy Linux Ubuntu User International Linux Community
Erschienen in EasyLinux 04/2006   »   Ausgabe bestellen

Befehle mehrfach ausführen

Unendlicher Loop

Hans-Georg Eßer


Befehle mehrfach oder immer wieder ausführen -- dazu können Sie in der Shell zwei einfache Programmschleifen verwenden. Wie das geht, zeigt dieser Artikel.

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.

Endlosschleifen

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.

50 Durchgänge

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)

Abb. 1: Zehnmal den gleichen Befehl ausführen? Kein Problem mit einer "for"-Schleife und dem Befehl "seq".

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]