% $Id$
\chapter{Wofür Shell-Programmierung?}

Natürlich stellt sich die Frage, in welchen Situationen ein Shell-Skript der
richtige Weg ist, und wann man vielleicht doch besser zu einer interpretierten
oder compilierten Sprache greift.

\section{Wofür?}

Die Shell ist der perfekte Baukasten für das Unix-Paradigma `small is
beautiful'. Die mitgelieferten Unix-Standardkommandos sind einfach gehalten,
erledigen aber auf effiziente Weise die Arbeit für die sie programmiert wurden.
Mit der Shell, bzw. dem Shell-Skript, wird aus dem Heinzelmännchen ein starker
Riese.

Shell-Skripte werden im Wesentlichen aus zwei Gründen geschrieben: Erstens,
weil man so ständig wiederkehrende Kommandos zusammenfassen kann, die man dann
mit einem einfachen Aufruf starten kann, und zweitens, weil man so einfache
Programme schreiben kann, die relativ intelligent Aufgaben erledigen können.

Der erste Aspekt ist wichtig, wenn man beispielsweise regelmäßig auftretende
Aufgaben erledigen möchte, wie z. B. das Backup von Log-Dateien. In dem Fall
schreibt man sich ein Skript, das die Dateien archiviert, und sorgt dafür, daß
dieses Skript in regelmäßigen Abständen aufgerufen wird (per
Cron-Job\index{Cron-Job}).

Der zweite Fall tritt ein, wenn man eine mehr oder weniger komplexe Abfolge von
Befehlen ausführen möchte, die voneinander abhängen. Ein Skript das zum
Beispiel eine Audio-CD kopieren soll, sollte das Brennprogramm nur dann
aufrufen, wenn der Einlesevorgang erfolgreich abgeschlossen wurde.

\section{Wofür nicht?}

Ein Shell-Skript besteht aus einer Abfolge von System-Tool-Aufrufen. Das heißt,
für jeden Schritt in einem Skript wird ein neuer Prozeß gestartet. Das kostet
eine Menge Systemzeit, die Skripte laufen also vergleichsweise langsam. Für
komplexe, zeitkritische oder langwierige Aufgaben sollte man also besser zu
Perl, Python oder in Extremfällen zu C / C++ greifen.

Shell-Skripte können als imperativ angesehen werden, für viele Aufgaben ist
aber ein objektorientierter Ansatz wesentlich geeigneter. Auch hier ist also
der Griff zu einer anderen Sprache angeraten.

Es gibt zwar ein paar Tools\footnote{Zum Beispiel dialog im Textmodus, oder
xmessage unter X.}, mit denen auch Shell-Skripte eine grafische oder
textorientierte Benutzeroberfläche (GUI) bekommen können, aber das ist trotzdem
nicht das natürliche Terrain der Shell-Programmierung.
