|
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:
ls / && echo 'ls / wurde erfolgreich ausgeführt!'
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.
man mich_gibts_nicht || echo 'Nur dann wird das echo-Kommando ausgeführt!'
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.
man xyz ; echo 'Das Manual für xyz existiert zwar nicht, aber echo wird trotzdem ausgeführt!'
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.
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 >>.
./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.
|