% $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.