Die Shell stellt die Arbeitsumgebung einer Systembenutzerin dar, sie umgibt sie im gewissen Sinne wie die Muschel ihre Perle. (Vermutlich ist dies der Ursprung für den etwas eigentümlichen Namen.) Sie setzt dem Benutzer den Befehlsprompt vor, interpretiert seine Kommandos , gibt sie an die Maschine weiter und liefert deren Antwort an den Benutzer zurück. In ihr lassen sich diverse Umgebungsvariablen (environment variable) setzen, die von Anwendungen dann ausgewertet werden können.
Es gibt verschiedene Shells, die alle ihre Vorzüge und Nachteile haben. Auf dem Server im Rechenzentrum wurde standardmäßig die Bourne-Shell sh für Benutzer eingetragen. Sie ist sehr elementar und häufig der Grund, warum Anfänger ihr Unix-System nur als kryptisch und unkomfortabel in der Bedienung kennen. Daher wurde im RZ eine weitere zusätzliche Shell eingerichtet - die Bourne Again Shell bash. Es gibt noch weitere Shells (csh, ksh), die aber nicht eingehend behandelt, sondern nur am Rande mit vorgestellt und kurz verglichen werden (wer sich freiwillig für diese Shells entscheidet, weiß in der Regel was sie tut).
Tabelle: Übersicht über
Eigenschaften verschiedener Shells. Quelle: [2]
Die Shell wird nach erfolgtem Login vom System für die Benutzerin aufgerufen, bietet ihr den Befehlsprompt und wartet auf ihre Eingaben. Vorher jedoch liest die Shell eine oder mehrere Startup-Dateien , in der Anweisungen für sie stehen und Variablenzuweisungen erfolgen. Diese Startup-Dateien beginnen, wie eingangs erwähnt, mit einem Punkt und sind daher für ein ls ohne Option -l nicht sichtbar. Tabelle 6.1 gibt eine kurze Übersicht über die Startup-Dateien der verschiedenen Shells und deren Namen. $ENV ist dabei der Wert der Variable ENV. Das Dollarzeichen vor einer Variablen weist die Shell jeweils an, diese zu referenzieren.
Ein Beispiel für eine Startup-Datei:
# @(#)stdprofile Revision: 1.3 10/4/90 02:52:52 # This is the default standard profile provided to a user. # They are expected to edit it to meet their own needs. MAIL=/usr/mail/${LOGNAME:?} export PATH="$PATH:$HOME/bin" export PS1="`whoami`@`uname -n`\:`pwd` \$ " export PS2='> ' export TERM=vt220
Der Variablen MAIL wird der Pfad zu der Datei zugewiesen, in der das Mailsystem des Systems die elektronische Post des Benutzers ablegt. Die Shell überpruft in regelmäßigen Abständen den Status dieser Datei. Bei einer Änderung (Größe, Zugriffszeit) informiert die Shell den Benutzer mit
You have mail in /usr/mail/arthur
über das Eintreffen neuer Mail .
Die Variablen PS1 und PS2 stehen für den primären und den
sekundären Prompt der Shell. Im interaktiven Betrieb zeigt die Shell den
primären Prompt. Wenn weitere Eingaben für die Abarbeitung eines
Kommandos benötigt werden, erscheint der sekundäre Prompt. Die in der Beispieldatei
verwendeten Kommandos gehören zum Standard-Unix-Befehlsumfang und erzeugen
einen primären Prompt in der Form:
arthur@trillian:~$
Da in den zugewiesenen Variablenwerten Leerzeichen vorkommen, muß der gesamte Ausdruck in Hochkommata gesetzt werden. Die Shell würde sonst das Leerzeichen als Wort- und damit Befehlsende interpretieren.
TERM verweist auf Dateien bzw. Einstellungen, die
im Zusammenhang mit der eingestellten
Terminalemulation wichtig
sind.
PATH ist der Verzeichnispfad, in dem die Shell nach ausführbaren Kommandos sucht. Durch die im Beispiel vorgenommene Erweiterung des Suchpfades um das Verzeichnis $HOME/bin besteht die Möglichkeit, innerhalb des eigenen Heimatverzeichnisses ausführbare Dateien zu speichern und diese ohne den vorangehenden kompletten Pfad aufrufen zu können.
Einige der angegebenen Shells bieten die Möglichkeit an, bereits ausgeführte Kommandos zu wiederholen, ohne die komplette Befehlszeile erneut abtippen zu müssen (History). Die Job-Control ermöglicht es, laufende Prozesse anzuhalten, in den Hintergrund zu schicken oder aus dem Hintergrund zurück in den Vordergrund zu holen.