Shell-Programmierung/was_ist_die_shell.tex

117 lines
6.3 KiB
TeX
Raw Normal View History

2001-07-02 14:52:18 +02:00
\chapter{Was ist die Shell?}\index{Shell}
2001-07-02 15:02:30 +02:00
Die Shell ist ein Programm, mit dessen Hilfe das System die Benutzerbefehle
verstehen kann. Aus diesem Grund wird die Shell auch oft als Befehls- oder
Kommandointerpreter bezeichnet.
2001-07-02 14:52:18 +02:00
\section{Sinn und Zweck}
2001-07-02 15:02:30 +02:00
In einem klassischen Unix-System (ohne die grafische Oberfl<66>che X) greifen die
Benutzer <20>ber Terminals\index{Terminal} auf das System zu. Auf diesen Terminals
k<EFBFBD>nnen nur Textzeichen dargestellt werden. Um dem Benutzer die Arbeit mit dem
System effektiv m<>glich zu machen, gibt es die Shell. Die Shell wird dabei f<>r
drei Hauptaufgaben benutzt:
2001-07-02 14:52:18 +02:00
\begin{itemize}
\item Interaktive Anwendung (Dialog)
\item Anwendungsspezifische Anpassung des Unix-Systemverhaltens (Belegen von Umgebungsvariablen)
\item Programmierung (Shell-Skripting). Zu diesem Zweck stehen einige Mechanismen zur Verf<72>gung, die aus Hochsprachen bekannt sind (Variablen, Datenstr<74>me, Funktionen usw.).
\end{itemize}
2001-07-02 15:02:30 +02:00
Urspr<EFBFBD>nglich handelte es sich dabei um ein relativ einfaches Programm, der
Bourne Shell (wird oft auch Standard-Shell genannt). Dies ist praktisch die
"`Mutter aller Shells"'. Aus dieser entwickelten sich im Laufe der Zeit mehrere
Varianten, die alle ihre eigenen Vor- und Nachteile mit sich bringen. Da es
unter Unix kein Problem darstellt den Kommandointerpreter auszutauschen, stehen
auf den meisten Systemen mehrere dieser Shells zur Verf<72>gung. Welche Variante
ein Benutzer verwenden m<>chte ist reine Geschmackssache.
2001-07-02 14:52:18 +02:00
\section{Die Qual der Wahl}
2001-07-02 15:02:30 +02:00
Um die Auswahl einer Shell zu erleichtern, werden hier die wichtigsten
Varianten kurz vorgestellt. Sie sind aufgeteilt in Einfach- und Komfort-Shells.
Die Komfort-Shells zeichnen sich durch komfortablere Funktionen zur
interaktiven Bedienung aus, w<>hrend die Einfach-Versionen <20>blicherweise f<>r die
Programmierung benutzt werden.
2001-07-02 14:52:18 +02:00
\medskip\emph{Einfach-Shells:}\nopagebreak
\begin{itemize}
2001-07-02 15:02:30 +02:00
\item Die
Bourne-\index{Bourne-Shell|textbf}\index{Shell>Bourne-|see{Bourne-Shell}} oder
Standard-Shell\index{Shell>Standard-|see{Bourne-Shell}}\index{Standard-Shell|see{Bourne-Shell}}
(\texttt{sh}\index{sh=\texttt{sh}|see{Bourne-Shell}}) ist die kompakteste und
einfachste Form. Sie bietet schon Mechanismen wie die Umlenkung der Ein- oder
Ausgaben, Wildcards zur Abk<62>rzung von Dateinamen, Shell-Variablen und einen
Satz interner Befehle zum Schreiben von Shell-Prozeduren. Neuere Versionen
beherrschen auch das Job-Controlling\index{Job-Controlling}. F<>r die
Entwicklung von Shell-Skripten sollte man sich auf diese Shell beschr<68>nken, da
sie auf praktisch allen Systemen zur Verf<72>gung steht. So bleiben die Skripte
portabel.
\item Die
Korn-Shell\index{Korn-Shell|textbf}\index{Shell>Korn-|see{Korn-Shell}}
(\texttt{ksh}\index{ksh=\texttt{ksh}|see{Korn-Shell}}), eine Weiterentwicklung
der Bourne-Shell, erlaubt das editieren in der Befehlszeile. Au<41>erdem gibt es
hier History\index{History}-Funktionen\footnote{History-Funktionen erm<72>glichen
es dem Benutzer, einfach auf zur<75>ckliegende Befehle zur<75>ckgreifen zu k<>nnen.},
eine Ganzzahl-Arithmetik, verbesserte M<>glichkeiten zur Mustererkennung,
Aliase\index{Aliase}\footnote{Ein Alias ist eine Abk<62>rzung f<>r einen Befehl.
Beispielsweise kann man das H<>ufig benutzte \texttt{ls -la} einfach durch
\texttt{la} ersetzen.} und das Job-Controlling\footnote{Unter Job-Controlling
versteht man einen Mechanismus, mit dessen Hilfe der Benutzer die Ausf<73>hrung
von Prozessen selektiv stoppen oder fortsetzen kann}\index{Job-Controlling}.
Au<EFBFBD>erdem bietet die Korn-Shell im Gegensatz zu fast allen anderen Shells die
M<EFBFBD>glichkeit, Aliase und Shell-Funktionen an Subshells zu vererben.
\item Die C-Shell \index{C-Shell|textbf}\index{Shell>C-|see{C-Shell}}
(\texttt{csh}\index{csh=\texttt{csh}|see{C-Shell}}) bietet <20>hnliche
Annehmlichkeiten wie die Korn-Shell, lehnt sich aber in der Syntax sehr stark
an die Programmiersprache C an. Sie sollte nach M<>glichkeit nicht zur
Shell-Programmierung benutzt werden, da sie an vielen Stellen nicht so
reagiert, wie man es erwarten sollte. \end{itemize}
2001-07-02 14:52:18 +02:00
\medskip\emph{Komfort-Shells:}\nopagebreak
\begin{itemize}
2001-07-02 15:02:30 +02:00
\item Die
Bourne-Again-Shell\index{Bourne-Again-Shell|textbf}\index{Shell>Bourne-Again-|see{Bourne-Again-Shell}}\index{Shell>Bash|see{Bourne-Again-Shell}}
(\texttt{bash}\index{bash=\texttt{bash}|see{Bourne-Again-Shell}}) ist voll
abw<EFBFBD>rtskompatibel zur sh, bietet aber von allen Shells die komfortabelsten
Funktionen f<>r das interaktive Arbeiten. Da die Bash ein GNU-Produkt ist, ist
sie die Standard-Shell auf allen Linux-Systemen. Sie steht aber auch auf den
meisten anderen Unixen zur Verf<72>gung. Die Bash unterst<73>tzt
Auto-Completion\index{Auto-Completion|textbf}\footnote{Mit Auto-Completion ist
das automatische Vervollst<73>ndigen von Dateinamen\index{Dateinamen} gemeint.},
History-Funktionen, Aliase\index{Aliase}, eine Ganzzahl-Arithmetik und
indizierte Arrays\index{Array}.
\item Die
TENEX-C-Shell\index{TENEX-C-Shell|textbf}\index{Shell>TENEX-C-|see{TENEX-C-Shell}}
(\texttt{tcsh}\index{tcsh=\texttt{tcsh}|see{TENEX-C-Shell}}) verh<72>lt sich zur
C-Shell wie die Bourne-Again-Shell zur Standard-Shell. Sie ist voll kompatibel,
bietet aber Komfort-Funktionen wie Kommandozeilen-Editierung, programmierbare
Auto-Completion\index{Auto-Completion}, Rechtschreibhilfen und eine History.
\item Die Z-Shell\index{Z-Shell|textbf}\index{Shell>Z-|see{Z-Shell}}
(\texttt{zsh}\index{zsh=\texttt{zsh}|see{Z-Shell}}) <20>hnelt der Korn-Shell,
enth<EFBFBD>lt aber viele Erweiterungen. Die Z-Shell unterst<73>tzt
Kommandozeilen-Editing, programmierbares
Auto-Completion\index{Auto-Completion}, Shell-Funktionen und eine History.
Zudem ist eine Rechtschreibpr<70>fung eingebaut. \end{itemize}
2001-07-02 14:52:18 +02:00
\medskip\emph{Exoten:}\medskip\nopagebreak
2001-07-02 15:02:30 +02:00
Desweiteren gibt es noch eine Reihe weiterer Shells, die aber nur selten
eingesetzt werden. Dazu geh<65>ren die
\texttt{ash}\index{ash|textbf}\index{Shell>ash=\texttt{ash}|see{ash}} (Ein
Bourne-Shell-Clone f<>r Rechner mit wenig Speicher.),
\texttt{rc}\index{rc|textbf}\index{Shell>rc=\texttt{rc}|see{rc}} (Noch ein
Bourne-Shell-Clone, urspr<70>nglich aus AT\&T Plan 9. Klein, schnell und mit eine
C-<2D>hnlichen Syntax.),
\texttt{esh}\index{esh|textbf}\index{Shell>esh=\texttt{esh}|see{esh}} (Klein
und schnell, bietet eine Lisp-<2D>hnliche Sprache),
\texttt{sash}\index{sash|textbf}\index{Shell>sash=\texttt{sash}|see{sash}}
(System Administrator's Shell - eine statisch gelinkte Shell mit integrierten
Standard-Kommandos.).
2001-07-02 14:52:18 +02:00
Diese Liste ist bei weitem nicht vollst<73>ndig.