3.6 Die Shell anwenden
Bei der Anwendung der Shell sollte man generell zwischen zwei verschiedenen Arten der Verwendung unterscheiden.
Die erste Möglichkeit, die Shell zu verwenden, besteht darin, sie als Arbeitsumgebung, also als Benutzerschnittstelle, zu verwenden. Man startet über die Shell Programme, etwa einen Editor, mit denen man dann letztendlich Arbeiten verrichtet.
Die zweite Möglichkeit, die Shell zu verwenden, besteht in der Programmierung von Shellskripts. Jede Shell hat dafür ihre eigene Shellskript-Sprache. Wir unterscheiden hierbei primär die Syntax der Bourne-Shell- und der C-Shell-Familie.
Um Ihnen eine Vorstellung vom Unterschied der Syntax beider Varianten zu geben, ist im Folgenden jeweils ein Beispielskript zur Bourne- und zur C-Shell aaaufgeführt. Beide Shellskripts erledigen die gleiche Aufgabe, sehen aber doch recht unterschiedlich aus. Im Laufe dieses Kapitels werden wir uns wie gesagt mit der Syntax der Bourne-Shell befassen, da Sie dadurch auch die meisten Shellskripte des Systems verstehen können.
#!/bin/sh for file in dateiA dateiB dateiC; do cp $file /backup/ done if [ "$a" = "test" ] then echo $a fi
Listing 3.8 Bourne-Shell-Skript
#!/bin/csh foreach file ( dateiA dateiB dateiC ) cp $file backup/ end if ($a == "test") then echo $a endif
Listing 3.9 C-Shell-Skript
Shellskripts dienen primär zur Automatisierung von administrativen Arbeitsschritten oder beim Booten des Systems zur Initialisierung und zum Start wichtiger Programme.
Dieses Kapitel wird sich zunächst mit den Grundlagen der Shell befassen. Anschließend werden wir uns in einem Kapitel den regulären Ausdrücken und den Tools sed und awk widmen. Außerdem werden wir uns in einem Kapitel mit Editoren und in einem weiteren Kepitel mit der Bourne-Shell-Programmierung, also mit der Shellskriptprogrammierung, befassen.
3.6.1 Vor- und Nachteile der Shellskripts
Doch bevor wir mit den Grundlagen beginnen, sei noch etwas zu den Vor- und Nachteilen der Shellskriptprogrammierung gesagt.
Im Vergleich zu anderen interpretierten Programmiersprachen wie Perl sind Shellskripts äußerst langsam. Dies liegt besonders daran, dass einzelne Programme erst aus dem Skript heraus – und oftmals auch mehrmals hintereinander neu – gestartet werden müssen, was sehr viel Zeit kostet. Im Vergleich zu hochperformanten Sprachen wie C++, bei der die Programme direkt als Binärdatei vorliegen und kein Skriptinterpreter vonnöten ist, ist die Shell natürlich noch viel langsamer.
Der Vorteil der Shell liegt allerdings in der Einfachheit und Flexibilität, mit der Skripts erstellt und gewartet werden können.
Shellskriptprogrammierung ist einfach und effizient. Da Sie eigentlich nur auf bereits vorhandene Programme zugreifen müssen, ist es nicht notwendig, komplexe Algorithmen zu implementieren, was in der Regel auch gar nicht möglich ist. Sie sollten in der Shell also keinen Binärbaum implementieren wollen, dafür kann aber beispielsweise binnen kürzester Zeit mit einem Bruchteil des Aufwandes, den Sie in Sprachen wie C oder Java benötigen würden, ein Skript für das Systembackup erstellt werden.
Zudem sind Shellskripts unter Unix-Systemen extrem portabel. Oftmals müssen Sie gar nichts anpassen, und wenn doch, dann sind dies in der Regel nur Pfade oder Programmparameter. Die Wahrscheinlichkeit, dass ein bash-Skript, das unter Linux geschrieben wurde, auch unter Solaris oder OpenBSD läuft, ist sehr groß.