|
Weitere Anweisungen
exit Wie schon bei der interaktiven Shell kann auch eine Shell-Skript mit exit abgebrochen werden. Vom Terminal aus kann mit der DEL-Taste abgebrochen werden, sofern das Signal nicht abgefangen wird (siehe trap). break [n] Verlassen von n umfassenden Schleifen. Voreinstellung für n ist 1.
continue [n]
Beginn des nächsten Durchgangs der n-ten umfassenden Schleife, d. h. der
Rest der Schleife(n) wird nicht mehr ausgeführt. Voreinstellung für n
ist 1.
Interne Kommandos
Etliche der besprochenen Shell-Kommandos starten nicht, wie sonst üblich,
einen eigenen Prozeß, sondern sie werden direkt von der Shell interpretiert
und ausgeführt. Teilweise ist keine E/A-Umleitung möglich. Etliche Kommandos
der folgenden Auswahl wurden schon besprochen. Andere werden weiter unten behandelt.
Zum Teil gibt es interne und externe Versionen, z. B. 'echo' (intern) und '/bin/echo'
(extern).
break | Schleife verlassen |
continue | Sprung zum Schleifenanfang |
echo | Ausgabe |
eval | Mehrstufige Ersetzung |
exec | Überlagerung der Shell durch ein Kommando |
exit | Shell beenden |
export | Variablen für Subshells bekannt machen |
read | Einlesen einer Variablen |
shift | Parameterliste verschieben |
trap | Behandlung von Signalen |
set
set [Optionen] [Parameterliste]
Setzen von Shell-Optionen und Positionsparametern ($1 ... $n). Einige Optionen:
- v Gibt die eingelesenen Shell-Eingaben auf dem Bildschirm aus.
- x Gibt alle Kommandos vor der Ausführungen aus
(--> zeigt Ersetzungen).
- n Liest die Kommandos von Shell-Skripten, führt sie jedoch nicht aus.
Der Aufruf von set ohne Parameter liefert die aktuelle Belegung der Shell-Variablen.
Außerdem kann set verwendet werden, um die Positionsparameter zu besetzen.
set eins zwei drei vier besetzt die Parameter mit $1=eins, $2=zwei,
$3=drei und $4=vier. Da dabei auch Leerzeichen, Tabs, Zeilenwechsel und anderes
"ausgefiltert" wird (genauer alles, was in der Variablen IFS steht), ist set
manchmal einfacher zu verwenden, als die Zerlegung einer Zeile mit cut. Die Belegung
der Parameter kann auch aus einer Variablen (z. B. set $VAR) oder aus dem Ergebnis eines
Kommandoaufrufs erfolgen. Beispiel:
set `date` # $1=Fri $2=Apr $3=28 $4=10:44:16 $5=MEZ $6=1999
echo "Es ist $4 Uhr"
Es ist 10:44:16 Uhr
Aber es gibt Fallstricke. Wenn man beispielsweise den Output von "ls" bearbeiten
möchte, gibt es zunächst unerklärliche Fehlermeldungen (set: unknown
option):
ls -l > foo
echo "Dateiname Laenge"
while read LINE
do
set $LINE
echo $9 $5
done < foo
rm foo
Da die Zeile mit dem Dateityp und den Zugriffsrechten beginnt, und für normale
Dateien ein "-" am Zeilenbeginn steht, erkennt set eine falsche Option
(z. B. "-rwxr-xr-x"). Abhilfe schafft das Voranstelle eines Buchstabens:
ls -l > foo
echo "Dateiname Laenge"
while read LINE
do
set Z$LINE
echo $9 $5
done < foo
rm foo
Weitere Beispiele:
Wenn ein Benutzer eingeloggt ist, wird ausgegeben seit wann. Sonst erfolgt eine
Fehlermeldung.
if HELP=`who | grep $1`
then
echo -n "$1 ist seit "
set $HELP
echo "$5 Uhr eingeloggt."
else
echo "$1 ist nicht auffindbar"
fi
Ersetzen der englischen Tagesbezeichung durch die deutsche:
set `date`
case $1 in
Tue) tag=Die;;
Wed) tag=Mit;;
Thu) tag=Don;;
Sat) tag=Sam;;
Sun) tag=Son;;
*) tag=$1;;
esac
echo $tag $3.$2 $4 $6 $5
|
|
|