Im Katalog suchen

Linux - Wegweiser zur Installation & Konfiguration, 3. Auflage

Online-Version

Copyright © 2000 by O'Reilly Verlag GmbH & Co.KG

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches Linux - Wegweiser zur Installation & Konfiguration oder wollen Sie es bestellen, dann klicken Sie bitte hier.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel

Shell-Programmierung

Icon

Kapitel 4

Im Abschnitt »Shells« in Kapitel 4, Grundlegende Unix-Befehle und -Konzepte, haben wir diverse Shells besprochen, die es für Linux gibt; hier wollen wir auf die Shell-Programmierung eingehen. Beim Schreiben von Shell-Skripten zeigen sich die Unterschiede am deutlichsten. Die Sprachen für die Bourne-Shell und die C-Shell weisen gewisse Unterschiede auf, aber bei der normalen interaktiven Benutzung fallen diese nicht so sehr ins Auge. Viele Unterschiede machen sich sogar erst dann bemerkbar, wenn Sie versuchen, weniger bekannte Eigenschaften der Shells - wie das Ersetzen von Wörtern oder einige der versteckten Funktionen zur Expandierung von Parametern - zu benutzen.

Die deutlichsten Unterschiede zwischen Bourne- und C-Shells zeigen sich bei den Strukturen der Flußkontrolle, einschließlich der if... then- und while-Schleifen. In der Bourne-Shell hat ein if... then das Format:

if liste then befehle elif liste then befehle else befehle fi

wobei die Liste eine Reihe von Befehlen darstellt (ganz allgemein »Pipeline« genannt), die als Bedingung für die Befehle if und elif (Kurzform von »else if«) benutzt wird. Die Bedingung gilt als erfüllt, wenn der Exit-Status der Liste gleich null ist (anders als bei Booleschen Ausdrücken in C zeigt in der Shell-Programmierung der Exit-Status null die erfolgreiche Beendigung an). Die Befehle innerhalb der Bedingungen sind einfach die Anweisungen, die ausgeführt werden sollen, wenn die entsprechende Liste wahr ist. Das then hinter jeder Liste muß auf einer neuen Zeile stehen, um es von der Liste selbst abzusetzen; alternativ dazu können Sie die Liste auch mit einem ; abschließen. Dasselbe gilt auch für die Befehle.

Ein Beispiel:

if [ "$PS1" ]; then PS1="\h:\w% " fi

Diese Folge von Anweisungen prüft, ob es sich bei der Shell um eine Login-Shell handelt (also ob die Prompt-Variable PS1 gesetzt ist). Wenn ja, wird der Prompt auf \h:\w% gesetzt, was beim Expandieren zum Rechnernamen mit aktuellem Arbeitsverzeichnis wird - etwa so:

loomer:/home/loomer/mdw%

Die Bedingung [...] hinter dem if ist ein interner bash-Befehl und eine abgekürzte Schreibweise für test. Der Befehl test und seine Kurzform stellen einen einfachen Mechanismus zum Testen der Werte von Shell-Variablen, zum Vergleich von Zeichenfolgen usw. dar. Statt [...] könnte hinter dem if eine beliebige andere Kombination aus Befehlen stehen; es muß nur sichergestellt sein, daß der Exit-Status des letzten Befehls den Wert der Bedingung widerspiegelt.

Unter der tcsh sieht eine if... then-Kombination so aus:

if (ausdruck) then befehle else if (ausdruck) then befehle else befehle endif

Der Unterschied liegt darin, daß der Ausdruck hinter dem if ein arithmetischer oder logischer Ausdruck ist, der von der tcsh intern ausgewertet wird. In der bash dagegen bildet ein Befehl die Bedingung, deren Wahrheitsgehalt vom Exit-Status des Befehls bestimmt wird. Die Verwendung von test oder [...] unter bash ähnelt der Verwendung von arithmetischen Ausdrücken unter tcsh.

Wenn Sie allerdings unter der tcsh innerhalb von Ausdruck einen externen Befehl aufrufen möchten, müssen Sie diesen in Klammern einschließen: {befehl}.

Das Gegenstück zu der oben gezeigten bash-Befehlsfolge sieht unter tcsh so aus:

if ($?prompt) then set prompt="%m:%/%% " endif

wobei wir die speziellen Prompt-Codes von tcsh benutzt haben. Sie werden bemerken, daß tcsh eine Syntax benutzt, die der von C ähnelt, und daß es sich bei den Ausdrücken um arithmetische und logische Terme handelt. Unter der bash dagegen besteht fast alles aus richtigen Befehlen, und Ausdrücke werden anhand des Exit-Status ausgewertet. Die beiden Shells haben vergleichbare Fähigkeiten, verfolgen aber verschiedene Herangehensweisen.

Ähnlich sieht es bei der while-Schleife aus. In der bash hat sie folgendes Format:

while liste do befehle done

Sie erzielen den gegenteiligen Effekt, wenn Sie while durch until ersetzen. Die Liste ist wieder eine Befehls-Pipeline, deren Exit-Status den Wert der Bedingung bestimmt (null zeigt die erfolgreiche Ausführung an, ein anderer Wert die erfolglose). Unter tcsh sieht diese Schleife so aus:

while (ausdruck) befehle end

wobei der Ausdruck ein logischer Term ist, der innerhalb der tcsh ausgewertet wird.

Icon

[11] Learning bash Shell
[12] Using csh and tcsh
bas(1)
tcsh(1)

Dies sollte ausreichen, um die wesentlichen Unterschiede von Shell-Skripten unter bash und tcsh zu verstehen. Lesen Sie auf jeden Fall die Manpages zu bash und tcsh (obwohl diese kaum als Lehrbuch geeignet sind; es sind eher Nachschlagewerke), und sehen Sie sich gegebenenfalls auch die Info-Seiten an. Es liegen auch einige Bücher und Lehrbücher zur Benutzung dieser beiden Shells vor - eigentlich können Sie jedes Buch zum Thema Shell-Programmierung benutzen und sich die Vorteile von bash und tcsh gegenüber den Standard-Shells aus den Manpages erschließen. Ebenfalls empfehlenswert sind Learning the bash Shell und Using csh and tcsh.



vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel


Weitere Informationen zum Linux - Wegweiser zur Installation & Konfiguration

Weitere Online-Bücher & Probekapitel finden Sie in unserem Online Book Center


O'Reilly Home | O'Reilly-Partnerbuchhandlungen | Bestellinformationen | Kontaktieren Sie uns
International | Über O'Reilly | Tochterfirmen

© 2000, O'Reilly Verlag