<next ><up><previous><content>


Eingebaute Befehle

 

Verzeichnis der eingebauten Befehle

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 gif

 

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 gif.

 

shift stellen
Verschiebt die Liste der Variablen $1, $2, ... um eine Stelle nach links. Siehe Abschnitt gif.

 

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 gif

 

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 gif.

 

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 ]

read - Einlesen von Daten

 

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 ]

 

set und shift - Kommandozeilenparameter

  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 gif 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 ]

 

trap - Behandlung von Signalen durch die Shell

 

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 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 gif 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>