127 lines
6.7 KiB
TeX
127 lines
6.7 KiB
TeX
% $Id$
|
|
\chapter{Was ist die Shell?}\index{Shell}
|
|
|
|
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.
|
|
|
|
\section{Sinn und Zweck}
|
|
|
|
In einem klassischen Unix-System (ohne die grafische Oberfläche X) greifen die
|
|
Benutzer über Terminals\index{Terminal} auf das System zu. Auf diesen Terminals
|
|
kö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:
|
|
\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ügung, die aus Hochsprachen bekannt sind (Variablen, Datenströme, Funktionen usw.).
|
|
\end{itemize}
|
|
Ursprü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ügung. Welche Variante
|
|
ein Benutzer verwenden möchte ist reine Geschmackssache.
|
|
|
|
\section{Die Qual der Wahl}
|
|
|
|
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 üblicherweise für die
|
|
Programmierung benutzt werden.
|
|
|
|
\medskip\emph{Einfach-Shells:}\nopagebreak
|
|
|
|
\begin{itemize}
|
|
\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ü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änken, da sie auf praktisch allen Systemen zur Verfügung steht. So
|
|
bleiben die Skripte mit kleinen Einschränkungen\footnote{Die verschiedenen
|
|
Implementierungen weisen kleine Unterschiede, z. B. bei der Behandlung von \$@
|
|
oder den Parametern von \texttt{read} (-r) auf.} 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ßerdem gibt es
|
|
hier History\index{History}-Funktionen\footnote{History-Funktionen ermöglichen
|
|
es dem Benutzer, einfach auf zurückliegende Befehle zurückgreifen zu können.},
|
|
eine Ganzzahl-Arithmetik, verbesserte Möglichkeiten zur Mustererkennung,
|
|
Arrays, Aliase\index{Aliase}\footnote{Ein Alias ist eine Abkü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ührung von Prozessen selektiv stoppen oder fortsetzen
|
|
kann}\index{Job-Controlling}. Außerdem bietet die Korn-Shell im Gegensatz zu
|
|
fast allen anderen Shells die Möglichkeit, Aliase und Shell-Funktionen an
|
|
Subshells zu vererben.
|
|
|
|
Die Korn-Shell existiert in verschiedenen Implementierungen, sowohl kommerziell
|
|
(ksh88), kostenlos (ksh93) als auch frei (pdksh).
|
|
|
|
\item Die C-Shell \index{C-Shell|textbf}\index{Shell>C-|see{C-Shell}}
|
|
(\texttt{csh}\index{csh=\texttt{csh}|see{C-Shell}}) bietet ä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}
|
|
|
|
\medskip\emph{Komfort-Shells:}\nopagebreak
|
|
|
|
\begin{itemize}
|
|
\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ä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ügung. Die Bash unterstützt
|
|
Auto-Completion\index{Auto-Completion|textbf}\footnote{Mit Auto-Completion ist
|
|
das automatische Vervollstä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ält sich zur
|
|
C-Shell wie die Bourne-Again-Shell zur Standard-Shell. Sie ist voll kompatibel,
|
|
bietet aber Kom\-fort-Funk\-tio\-nen wie Kom\-man\-do\-zei\-len-Edi\-tie\-rung,
|
|
programmierbare Auto-Completion\index{Auto-Completion},
|
|
Recht\-schreib\-hil\-fen 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}}) ähnelt der Korn-Shell,
|
|
enthält aber viele Erweiterungen. Die Z-Shell unterstützt
|
|
Kom\-mandozeilen-Editing, programmierbares
|
|
Auto-Completion\index{Auto-Completion}, Shell-Funktionen und eine History.
|
|
Zudem ist eine Rechtschreibprüfung eingebaut. \end{itemize}
|
|
|
|
\medskip\emph{Exoten:}\medskip\nopagebreak
|
|
|
|
Desweiteren gibt es noch eine Reihe weiterer Shells, die aber nur selten
|
|
eingesetzt werden. Dazu gehö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ünglich aus AT\&T Plan 9. Klein, schnell und mit eine
|
|
C-ähnlichen Syntax.),
|
|
\texttt{esh}\index{esh|textbf}\index{Shell>esh=\texttt{esh}|see{esh}} (Klein
|
|
und schnell, bietet eine Lisp-ähnliche Sprache),
|
|
\texttt{sash}\index{sash|textbf}\index{Shell>sash=\texttt{sash}|see{sash}}
|
|
(System Administrator's Shell - eine statisch gelinkte Shell mit integrierten
|
|
Stan\-dard-Kom\-man\-dos.).
|
|
|
|
Diese Liste ist bei weitem nicht vollständig.
|