2003-04-11 15:05:25 +00:00
|
|
|
|
% $Id$
|
2001-07-02 12:52:18 +00:00
|
|
|
|
\chapter{Wof<EFBFBD>r Shell-Programmierung?}
|
|
|
|
|
|
2004-12-02 13:54:06 +00:00
|
|
|
|
Nat<EFBFBD>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<EFBFBD>r?}
|
|
|
|
|
|
2001-09-24 16:39:49 +00:00
|
|
|
|
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<6C>nnchen ein starker
|
|
|
|
|
Riese.
|
|
|
|
|
|
2001-07-02 12:52:18 +00:00
|
|
|
|
Shell-Skripte werden im Wesentlichen aus zwei Gr<47>nden geschrieben: Erstens,
|
|
|
|
|
weil man so st<73>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<6C><6D>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<61>r, da<64>
|
|
|
|
|
dieses Skript in regelm<6C><6D>igen Abst<73>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<73>hren m<>chte, die voneinander abh<62>ngen. Ein Skript das zum
|
|
|
|
|
Beispiel eine Audio-CD kopieren soll, sollte das Brennprogramm nur dann
|
|
|
|
|
aufrufen, wenn der Einlesevorgang erfolgreich abgeschlossen wurde.
|
|
|
|
|
|
2004-12-02 13:54:06 +00:00
|
|
|
|
\section{Wof<EFBFBD>r nicht?}
|
|
|
|
|
|
|
|
|
|
Ein Shell-Skript besteht aus einer Abfolge von System-Tool-Aufrufen. Das hei<65>t,
|
|
|
|
|
f<EFBFBD>r jeden Schritt in einem Skript wird ein neuer Proze<7A> 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<6D>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<66>che (GUI) bekommen k<>nnen, aber das ist trotzdem
|
|
|
|
|
nicht das nat<61>rliche Terrain der Shell-Programmierung.
|