. SkriptDatei sh SkriptDatei
Das Kommentarzeichen in einer Skriptdatei ist das #. In der ersten Zeile kann in einem Kommentar festgelegt werden, welche Shell bzw. welcher Interpreter für diese Datei geladen werden soll. Das erste Zeichen hinter dem Kommentarzeichen ist ein Ausrufezeichen. Dann folgt mit kompletten Pfad der Interpreter. Beispiel:
#!/bin/sh
MYENV="Tolles Wetter" export MYENV
In der Kornshell kann auch setzen und exportieren der Variable zusammengesetzt werden.
export MYENV="Tolles Wetter"
Da dies nicht unter der Standard Bourne-Shell funktioniert und Skripten sehr oft aus Kompatibilitätsgründen mit der /bin/sh gestartet werden, sollte man dies vermeiden.
Wenn ein Skript gebraucht wird, der Environmentvariablen setzen soll, muß dieser mit dem Punktkommando gestartet werden. Beispiel:
. skript
Ansonsten wird eine Kindshell gestartet und
| $1 $2 .. | Parameterstrings |
| $0 | Name der Kommandodatei |
| $# | Anzahl der übergebenen Parameter |
| $? | Ergebnis des Kommandos (korrekter Ablauf) |
| $$ | Prozeßnummer der Shell |
| $! | Prozeßnummer des letzten im Hintergrund abgelaufenen Prozesses |
| $- | aktuelle Shellflags |
Syntax:
for Variable in Menge do Kommandos done
In der Schleife wird der Variable die Werte, die durch die Menge hinter dem 'in' definiert wird, der Reihe nach annehmen. Die Variable kann als Argument innerhalb der Schleife durch ein vorangestelltes Dollarzeichen ($) zugegriffen werden.
Die Schleife wird so oft durchlaufen, wie Argumente hinter dem 'in' stehen.
Beispiel:
for i in OSCLUCLT.c OSCLUCLU.c OSCLUSLU.c OSCLUSRV.cbl main.cbl do pr $i | lpr done
Diese Schleife druckt die aufgeführten Dateien aus.
for a in *.c do echo $a done
zählt alle C-Sources dieses Verzeichnisses auf.
Für die meisten Strukturbefehle muß auf eine Bedingung abgefragt werden. Dies geht nicht direkt, sondern wird mittels des Befehls test erreicht. Dabei gilt
| test -f Name | ist DateiName eine existierende Datei? |
| test -d Name | ist Name ein existierendes Verzeichnis? |
| test String | ist String eine nichtleere Zeichenkette? |
| test String1 = String2 | sind die Zeichenketten String1 und String2 gleich? |
| test Nummer1 -ge Nummer2 | ist die Zahl Nummer1 groesser oder gleich Nummer2? |
if Bedingung then Befehle else Befehle fi
Beispiel für einen rekursiven Skript
cd $1
pwd
ls
for i in *
do
if test -d $i
then
listtree $i
fi
done
Fallunterscheidung
case $i in
*cc) Kommandos ;;
*a) Kommandos ;;
*) Default Kommandos ;;
esac
Man kann aus der Kommandodatei heraus Programmen Eingaben mitgeben. Dazu wird hinter dem Programmnamen die Zeichenfolge << angegeben. Danach muß ein beliebiges Zeichen folgen, das die Eingabe einleitet. Die nächsten Zeilen werden solange als Eingabe verwendet, bis dieses Zeichen ein zweites Mal auftaucht. Man muß also ein Zeichen verwenden, daß nicht als Eingabe benötigt wird. In unserem Beispiel ist dies ein Ausrufezeichen.
<<! Eingabe1 Eingabe2 !
read ANSWER
| Homepage | (C) Copyright 1999 Arnold Willemer |