<next ><up><previous><content>
Eine ganze Reihe von Befehlen ist in die Shell eingebaut und wird direkt
ausgeführt, ohne daß die Erzeugung eines Unterprozesses notwendig wird. Es sind
dies:
- # kommentar
- Der Teil der Kommandozeile vom Doppelkreuz bis zum Ende der Zeile wird
ignoriert.
- : parameter
- Der Doppelpunkt wirkt als no-operation Befehl. Er kann beliebige
Parameter erhalten, die ebenfalls nichts bewirken. Der Befehl erzeugt den
Exit-Status 0.
- . dateiname
- Das Punkt-Kommando läßt die aktuelle Shell eine Folge von Anweisungen aus
der angegebenen datei lesen. Im Gegensatz zu einem regulären Shellscript
werden die Kommandos nicht in einer Subshell ausgeführt.
- break level
- Beendet die aktuelle for-, while- oder until-Schleife.
Mit der Angabe level kann man auch verschachtelte Schleifen abbrechen;
die Angabe bestimmt, wie viele Verschachtelungsebenen auf einmal verlassen
werden sollen.
- cd verzeichnis
- Wechselt das aktuelle Verzeichnis bzw. in das durch die Variable $HOME
angegebene Verzeichnis, wenn die Angabe verzeichnis fehlt.
- continue level
- Beendet die aktuelle Schleife und startet sofort den nächsten
Schleifendurchlauf. Die Angabe level wirkt wie beim break-Kommando.
- echo text
- Das Kommando gibt seine Argumente aus. Bei älteren UNIX-Systemen ist echo
kein internes Kommando.
- eval kommando
- Wertet den Parameter kommando als Kommando aus (mit allen
Textersetzungen) und führt ihn dann aus.
- exec kommando
- Startet das als kommandp angegebene Programm an Stelle der Shell,
d.h. der Shell-Prozeß ersetzt sich selbst durch das angegebene Kommando.
- exit status
- Beendet die aktuelle Shell mit dem angegebenen status.
- export variable ...
- Die angegebene variable wird zum Export markiert, d.h. sie wird
Bestandteil der Ausführungsumgebung aller nachfolgenden Kommandos.
- hash (-r) name
- Bei langen Suchpfaden kann das Durchsuchen des aktuellen Pfades sehr lange
dauern. Die Shell merkt sich daher den vollen Pfadnamen eines Kommandos, das sie
schon einmal ausgeführt hat. Das Kommando hash -r löscht diese Liste und
erzwingt ihren Neuaufbau. Es ist notwendig, wenn während der Laufzeit der Shell
neue Kommandos im Suchpfad dazugekommen sind. Ohne Angabe von Parametern bewirkt
das Kommando die Ausgabe der kompletten Liste, mit der Angabe von name
wird nur der gemerkte Pfad zum angegebenen Kommando ausgegeben.
- pwd
- Der Name des aktuellen Verzeichnisses wird ausgegeben. Das Kommando
existiert zum Teil auch noch als externer Befehl.
- read variable ...
- Der Befehl liest eine Zeile der Standardeingabe und unterteilt sie in Worte.
Siehe Abschnitt
- readonly variable ...
- Die angegebenen Variablen werden schreibgeschützt, d.h. sie sind fortan nur
noch als Konstanten zu verwenden. Ohne Angabe von Variablennamen werden die
Namen aller schreibgeschützten Variablen ausgegeben.
- return status
- Beendet die aktuelle Shellfunktion mit dem angegebenen status.
- set option parameter
- Siehe Abschnitt
.
- shift stellen
- Verschiebt die Liste der Variablen $1, $2, ... um eine Stelle
nach links. Siehe Abschnitt
.
- test
- Prüft die angegebene Bedingung und erzeugt je nachdem einen Exit-Status von
0 oder nicht 0. Der Befehle ist auch unter dem Namen [ verfügbar. In
vielen UNIX-Versionen existiert er außerdem noch als externes Kommando. Siehe
Abschnitt
- times
- Gibt die bisher verbrauchte CPU-Zeit der aktuellen Shell aus.
- trap kommando signal ...
- Wenn die Shell das angebene signal empfängt, wird das angegebene
kommando gestartet, danach wird die Ausführung normal fortgesetzt. Siehe
Abschnitt
.
- type name
- Die Shell gibt aus, welches Programm gestartet wird, wenn name als
Kommando eingegeben wird.
- umask wert
- Mit diesem Kommando kann festgelegt werden, welche Zugriffsrechte eine Datei
beim Anlegen standardmäßig bekommt. Beim Anlegen einer Datei gibt ein Prozeß die
von ihm gewünschten Zugriffsrechte vor (z.B. 0666). Davon wird die umask (z.B.
0022) ohne Übertrag abgezogen. Die resultierende Zahl gibt die tatsächlich
installieren Zugriffsrechte (hier: 0644) an.
- unset name ...
- Löscht die Variablen oder Funktionen mit den angegebenen namen.
- wait pid
- Der Befehl läßt die Shell auf das Ende des Hintergrundprozesses mit der
Prozeßnummer pid warten. Fehlt die Angabe, so wird auf das Ende aller
Hintergrundprozesse gewartet.
[ top ]
Das Kommando read bekommt als Parameter eine Liste von
Variablennamen. Es liest eine Zeile von der Standardeingabe und unterteilt diese
in Worte. Jedes gelesene Wort wird von links nach rechts einer der angegebenen
Variablen zugewiesen. Sind nicht genügend Worte vorhanden, werden die
verbleibenden Variablen mit dem leeren Wort belegt. Sind mehr Worte als
Variablennamen vorhanden, so werden der letzten angegebenen Variablen die
übriggebliebenen Worte zugewiesen.
Figure: Verhalten von read
read liest von der Standardeingabe, diese kann wie gewohnt umgelenkt
werden. Der Exitcode von read ist Null, falls das Einlesen der Werte
gelungen ist. Trifft der Befehl beim Lesen auf ein Dateiende (end of file,
wird dies mit einem Exitcode ungleich Null signalisiert. Dies erlaubt es, den
Befehl als Steuerkommando einer while-Schleife einzusetzen und so z.B.
eine Datei zeilenweise zu bearbeiten.
Figure: read und while
Im Beispiel wird die Standardeingabe der gesamten while-Schleife
umgelenkt, sodaß aus einer Datei gelesen wird. Jeweils eine Zeile der
Eingabedatei wird in die Variable zeile eingelesen und dann in der
Schleife verarbeitet. Die Schleife bricht ab, wenn der Exitcode von read
ungleich Null wird. Das ist der Fall, wenn das Ende der Eingabedatei erreicht
wird.
[ top ]
Die Anweisung set hat in der Shell
mehrfache Funktionen. Einmal dient sie dazu, Kommandozeilenoptionen bei einer
laufenden Shell nachträglich zu setzen (mit set -options) und zu löschen
(mit set +options).
Andererseits kann man den set-Befehl auch verwenden, um die Variablen
$1, $2, ... neu zu belegen. Die Syntax lautet in diesem Fall
$ set -- wort1 wort2 ...
Die Angabe von ''- -'' ist in diesem Fall optional. Die beiden Minuszeichen
stehen, wie im Kapitel
erwähnt, um das Ende der Optionsliste zu kennzeichnen. Dadurch werden wort1
und alle folgenden Parameter als Worte und nicht als Optionen für den set-Befehl
erkannt,sodaß das Kommando auch dann richtig arbeitet, wenn wort1 mit
einem Minus- oder Pluszeichen beginnt.
Wenn der Befehl in der beschriebenen Weise gebraucht wird, ordnet er wort1
der Variablen $1, wort2 der Variablen $2, ... und wort9
der Variablen $9 zu. Auf diese Weise kann man eine Folge von Worten
bequem zerlegen und auf einzelne Worte der Folge ohne große Schwierigkeiten
zugreifen.
Figure: Zerlegung einer Benutzereingabe in Einzelteile
Die Shell erlaubt den direkten Zugriff nur auf die ersten neun
Kommandozeilenparameter. Auf eventuell vorhandene, weitere Parameter kann man
nur mit der Anweisung shift zugreifen. Dieses Kommando schiebt die
Kommandozeilenparameter um ein Wort nach links, sodaß $2 nach dem shift
unter dem Namen $1, $3 unter dem Namen von $2 und so weiter
verfügbar ist.
Figure: Funktionsweise von shift
Wenn man ein Kommando eine beliebige Anzahl von Parametern verarbeiten lassen
möchte, geht man in der Regel so vor, daß man immer nur einen Parameter (etwa
immer $1) betrachtet und dort nacheinander mit shift die Werte
hineinschiebt. Sobald der nachgeschobene Wert leer ist, ist man fertig.
Figure: Beispiel für die Abarbeitung beliebig vieler Parameter
[ top ]
Das Kommando trap dient der Handhabung von Signalen in
Shellscripten. Es ermöglicht unter anderem, ein Shellscript gegen den Abbruch
durch den Benutzer zu schützen. Signale können von einem UNIX-Prozeß auf drei
Arten behandelt werden:
- Der Prozeß kann durch das Signal abgebrochen werden. Dies ist für die
meisten Signale die Voreinstellung.
- Der Prozeß kann das Signal ignorieren. Er verhält sich so, als ob das Signal
gar nicht gesendet worden wäre.
- Der Prozeß installiert eine Signalbehandlungsroutine. Tritt ein Signal auf,
so wird diese Routine abgearbeitet und das Programm danach normal fortgesetzt.
Der Befehl trap kann dementsprechend auf drei Arten benutzt werden,
um jeden dieser Effekte zu erzielen.
- trap signalliste
- Die Angabe einer Signalliste mit trap bewirkt, daß die angegebenen
Signale defaultmäßig behandelt werden. Für die meisten Signale bedeutet dies,
daß der Prozeß beim Eintreffen des Signals abgebrochen wird.
- trap '''' signalliste
- Die Angabe eines leeren Kommandos vor der Signalliste bewirkt, daß die
betreffenden Signale vom Shellscript ignoriert werden. Einige Signale,
namentlich das Signal KILL und das Signal STOP, können nicht ignoriert werden.
- trap ''kommando'' signalliste
- Die Angabe eines Kommandos und einer Liste von Signalen bewirkt, daß das
angegebene Kommando ausgeführt wird, wenn eines der aufgeführten Signale
eintrifft. Nach der Abarbeitung des Kommandos wird die Ausführung des
Shellscriptes an der Stelle fortgesetzt, an der es unterbrochen wurde.
Das kommando wird von der Shell zweimal gelesen, d.h. es läuft zweimal
durch die verschiedenen Ersetzungsmechanismen der Shell: Einmal wenn der Trap
installiert wird und einmal, wenn er ausgeführt wird.
Die Signalnummer 0 hat in der Shell eine besondere Bedeutung. Ein Trap, der
für das Signal 0 installiert wird, wird ausgeführt, wenn das Shellscript beendet
wird.
Figure: Ignorieren von SIGINT (Control-C)
Im Beispiel
werden drei Signalbehandlungsroutinen installiert: Das Signal 0 wird mit einem
echo-Kommando belegt. Vor dem Ende des Scriptes wird dieses Kommando
ausgeführt. Das Signal 2 (SIGINT, Drücken von Control-C) wird ignoriert. Das
Signal 3 (SIGQUIT, Drücken von Control-)
wird mit einem echo-Kommando belegt. Das eigentliche Script zählt im
Sekundentakt von 0 bis 10. Nach dem Starten des Scriptes versucht ein Benutzer,
das Script durch Drücken von Control-C und Control-
zu unterbrechen.
[ top ]
<next ><up><previous><content>