|
Aufgaben der Shell
- Kommandozeile vom Terminal annehmen, das Kommando entschlüsselnund in seine Komponenten (Kommandoname, Optionen, Parameter) aufteilen
- Gewünschtes Programm suchen und starten. Der Suchweg wird durcheine Shellvariable PATH vorgegeben.
- Steuerung der Ein- und Ausgabe des Terminals. UNIX ist als Dialogsystemkonzipiert und war ursprünglich für den Betrieb mit Fernschreibern(Teletype) und Datensichtgerät konzipiert. Diese sogenannten "Terminals"findet man heute noch in den logischen Terminals, z. B.:
- den Konsolen, die dem Bildschirm und der Tastatur des PCs zugeordnet sind,
- den Pseudo-Terminals, die einer Telnet-Verbindung zugeordnet werden oder
- den X-Terminal-Fenstern auf der grafischen Benutzeroberfläche.
Daher gibt es drei Standarddateien, die dem aktuellen Terminal zugeordnet sind:
- Standardeingabe (Tastatur, stdin)
- Standardausgabe (Bildschirm, stdout)
- Standard-Fehlerausgabe (Bildschirm, stderr)
Die Shell kann angewiesen werden, die Ein- und Ausgaben umzuleiten.
- Ersetzung von Sonderzeichen und Befehlssubstitution. Kommandoeingaben
können durch Sonderzeichen erweitert und der Kommandostring kann selbst
durch die Shell expandiert werden.
- Ablaufsteuerung. Die Shell beherrscht viele Strukturen, wie man sie
von Programmiersprachen her kennt (Test, bedingte Anweisung, Schleifen,
Variablen, Rechenanweisungen).
- Erzeugen von Kind- und Hintergrundprozessen.
Es gibt weiterhin die Möglichkeit, Programme "im Hintergrund" zu starten
und am Bildschirm weiterzuarbeiten, während das Programm läuft. Sobald
die Shell bereit ist, Kommandoeingaben anzunehmen, meldet sie sich mit einem
Bereitschaftszeichen (Prompt). Im einfachsten Fall ist dies ein "$"-Zeichen als
normales Prompt, dem "#" als Prompt für Superuser und dem ">"-Prompt, wenn
noch weitere Eingaben erwartet werden. Wie vieles in der Shell, kann der Prompt
beliebig modifiziert werden.
Anmerkungen:
- In diesem Kapitel geht es um grundlegende
Eingenschaften der Shell, später wird das Thema noch vertieft.
- Die Shell ist ein ganz normales Programm, das von der Standardeingabe
(Tastatur) liest und auf die Standardausgabe (Bildschirm) ausgibt. Wenn das
Dateiende erreicht wird (End Of File, EOF), z. B. durch Eingabe von CTRL-D,
terminiert sie. Ist es die Login-Shell, erfolgt ein Logoff des Benutzers.
- Die Shell kann wie ein Programm als Subshell aufgerufen
werden (Schachtelung). Dies wird beispielsweise benötigt, wenn man Shell-Programme
(shell skripts) testen will.
- Suchpfade für Kommandos: Es gibt zwei
Möglichkeiten, den Pfad für ein Kommando festzulegen:
- Direkt als absoluter oder relativer Pfadname
- Indirekt über den Pfad, der
in der Shell-Variablen PATH gespeichert ist.
Kommandobeschreibung
In der Literatur (auch beim Kommando "man") werden die Kommandos in Kurzform
beschrieben. Dabei werden Werte, die optional sind, in eckige Klammern gesetzt. Die
(meist einbuchstabigen) Optionen werden als Kette aufgelistet, z.B. [-aeGhlz].
Das bedeutet nichts anderes, als daß eine beliebige Kombination dieser
Optionen möglich ist (ob sie sinnvoll ist, wird hier nicht berücksichtigt).
UNIX-Benutzer sind "mündig"! Was heißt das? Wenn Sie ein Kommando
eingeben, das die gesamte Platte löscht, fragt das Programm nicht
noch einmal nach, ob Sie das auch wirklich wollen, sondern löscht
die Platte sofort.
Beim Testen von Shell-Programmen hilft das Kommando
echo [Argumente]
Dieses Kommando gibt die Argumente auf dem Bildschirm aus. Für den Einsteiger
ist das Kommando wichtig, weil er so die Kommandobearbeitung der Shell recht gut
verfolgen und studieren kann (Einstreuen von echo-Kommandos in die Befehlsfolge).
Bearbeitung der Kommandozeile durch die Shell
Ein Kommando wird erst ausgeführt, wenn der Benutzer am Ende der
Kommandozeile die RETURN-Taste drückt. Eine genauere Kenntniss des dann
vonstatten gehenden Ablaufs erlaubt es, zu verstehen, warum etwas nicht so klappt,
wie man es sich vorgestellt hat. Daher sollen diese Schritte hier kurz beschrieben
werden. (Anmerkung: Einige der Kommandotrenner, `...`, Jokerzeichen und Variablen
werden erst später behandelt.):
- Die Shell liest bis zum ersten Kommandotrenner (& && || ; > <) und
stellt fest, ob Variablenzuweisungen erfolgen sollen oder die Ein-Ausgabe umgelenkt werden
muß.
- Die Shell zelegt die Kommandozeile in einzelne Argumente. Sie trennt die einzelnen
Argumente durch eines der Zeichen, die in der Shell-Variablen IFS (Internal Field
Separator) stehen, normalerweise Leerzeichen, Tabs und Newline-Zeichen.
- Variablenreferenzen, die in der Kommandozeile stehen, werden durch ihre
Werte ersetzt.
- Kommandos, die in `...` oder bei der bash in $(...)
stehen, werden ausgeführt und durch ihre Ausgabe ersetzt.
- stdin, stdout und stderr werden auf ihre "Zieldateien" umgelenkt.
- Falls in der Kommandozeile noch Zuweisungen an Variablen stehen, werden
diese ausgeführt.
- Die Shell sucht nach Jokerzeichen und und ersetzt
diese durch passende Dateinamen.
- Die Shell führt das Kommando aus.
|
|
|