Start Shellprogrammierung Kommandotrenner
Kommandotrenner E-Mail
Geschrieben von: tpm   

Eine besondere Stärke der Shell ist die Fähigkeit Kommandos zu verketten oder sie voneinander abhängig zu machen. Diese Möglichkeiten lassen sich sowohl in der einfachen Kommandozeile, wie auch in Scripten umsetzen. Dazu bedient sie die Shell einiger reservierter Zeichen.

 

Diese heißen Kommandotrenner und haben im Wesentlichen zwei Aufgaben. Zum einen der Shell zu signalisieren, dass an ihrer Position ein Kommando oder eine Befehlsfolge endet und zum anderen, je nach Art des Kommandotrenners, dass weitere Kommandos oder Befehlsfolgen zur Abarbeitung bereitstehen oder berücksichtigt werden müssen. Zu den Kommandotrennern gehören:

 

Zeichen Bezeichnung Bedeutung
&& doppeltes kaufmännisches Und
logisches AND
|| doppelter senkrechter Strich
logisches EXOR
; Semikolon einfacher Kommandotrenner
> größer als
Ausgabeumlenkung
< kleiner als
Eingabeumlenkung

 

Im Folgenden einige Beispiele mit Erläuterungen:

 

input
ls / && echo 'ls / wurde erfolgreich ausgeführt!'

 

output
backup.tar  boot   dev  home    initrd.img  lib64       media  opt   root  srv  tmp  var
bin cdrom etc initrd lib lost+found mnt proc sbin sys usr vmlinuz
ls / wurde erfolgreich ausgeführt!

 

Nur wenn das vorangehende Kommando (hier ls /) erfolgreich ausgeführt wurde, wird auch das Kommando nach && ausgeführt. Dieser Kommandotrenner wird gerne bei Kommandos eingesetzt, die zum einen Zeit für ihre Ausführung benötigen und zum anderen voneinander abhängig sind. So muss man nicht ständig auf die Shell blicken, um das nächste Kommando zu starten.

 

 

input
man mich_gibts_nicht || echo 'Nur dann wird das echo-Kommando ausgeführt!'

 

output
No manual entry for mich_gibts_nicht
Nur dann wird das echo-Kommando ausgeführt!

 

Das logische EXOR (exklusiv ODER) macht die fehlgeschlagene Ausführung des ersten Kommandos zur Bedingung. Hier wird das zweite Kommando also nur ausgeführt, weil man mich_gibts_nicht zu einem Fehler führt. Das Resultat ist zum einen die Fehlermeldung des Systems, gefolgt von der echo-Ausgabe. Dieser Kommandotrenner wird oft in Situationen eingesetzt, in denen bei fehlgeschlagener Ausführung des ersten Kommandos ein Plan B in Kraft treten soll.


 

input
man xyz ; echo 'Das Manual für xyz existiert zwar nicht, aber echo wird trotzdem ausgeführt!'

 

output
No manual entry for xyz
Das Manual für xyz existiert zwar nicht, aber echo wird trotzdem ausgeführt!

 

Hier tritt augenscheinlich der gleiche Effekt ein wie beim logischen EXOR auf. Allerdings ist der Unterschied beim Semikolon, dass es keine Bedingung darstellt. Es trennt lediglich Kommandos, vergleichbar mit dem abschließenden betätigen der Return-Taste nach einer Kommandozeile. So lassen sich Konstrukte, welche mehrzeilig aufgebaut sind, in eine Zeile fassen.

 

 

input
ls / > inhalt_vom_wurzelverzeichnis

 

Das Kommando ls / wird ausgeführt, die Ausgabe aber nicht auf dem Bildschirm dargestellt, sondern durch die Ausgabeumlenkung in die Datei inhalt_vom_wurzelverzeichnis umgelenkt. Falls die Datei noch nicht existiert, wird sie automatisch angelegt. Falls die Datei allerdings existiert, wird deren Inhalt überschrieben. Um die Ausgabe einfach anzufügen, bedient man sich der speziellen Form >>.

 

 

input
./shellscript.sh < script_eingaben

 

Das Script shellscript.sh sei ein beliebiges Script, welches Benutzereingaben erwartet. Zwecks Automatisierung werden diese Benutzereingaben vorab zeilenweise in der Textdatei script_eingaben abgelegt. Beim Start des Shellscripts werden diese Eingaben durch die Eingabeumlenkung automatisch aus der Textdatei entnommen, so dass keine Benutzereingaben mehr erforderlich sind.

 

Zuletzt aktualisiert am Sonntag, den 25. Oktober 2009 um 10:52 Uhr