|
|
Linux-Einführung
Shell-Programmierung |
|
| Weitere Befehle | Grafische Anwendungen |
| $1, $2, ...$9 |
die einzelnen Argumente |
| $0 |
der Name des Programms |
| $* |
alle Argumente |
| $# |
die Anzahl der Argumente |
| -f file |
file ist eine Datei |
| -d file |
.... ein
Verzeichnis |
| -r file |
.... lesbar |
| -w file |
.... schreibbar |
| -x file |
....
ausführbar |
| -s file |
.... nicht
leer |
| -z string |
Zeichenkette
ist leer |
| -n string |
.... nicht
leer |
| string1 = string2 |
Zeichenketten
sind gleich |
| string2 != string2 |
....
ungleich |
| n1 -eq n2 |
Zahlen
sind gleich |
| n1 -ne n2 |
....
ungleich |
| n1 -lt n2 (-le,
-gt, -ge) |
Zahl
1 ist kleiner
(kleiner oder gleich, grösser, grösser oder gleich) Zahl 2 |
| ( ausdruck ) |
Klammerung
von
Teilausdrücken |
| ! ausdruck |
Negation |
| -a |
AND |
| -o |
OR |
führt die Anweisung(en) bedingung
aus. Falls der Exit-Status true
ist, werden die Befehle nach then,
sonst die nach else
ausgeführt. Der else-Teil
kann auch fehlen.
In der erweiterten Form
if bedingung1
then
kommandos1
elif bedingung2
then
kommandos2
else
kommandos3
fi
wird, falls die erste Bedingung false
ist, die zweite Bedingung überprüft und entsprechend
verzweigt. Es kann auch mehr als ein elif
vorkommen.
#
# getlock sec
#
LOCKFILE=$HOME/.tstlock
if [ $# -ne 1 ]
then
echo "Aufruf: $0 sekunden"
exit -1
fi
if [ -f $LOCKFILE ]
then
echo "$LOCKFILE existiert schon"
exit 1
fi
>
$LOCKFILE
# Lock erzeugen
sleep $1
rm
$LOCKFILE
# und wieder löschen
Die Kommandos in einer while-Schleife
>
$LOCKFILE
# Lock erzeugen
sleep $1
rm
$LOCKFILE
# und wieder löschen
do
sleep 10
done
echo "$1 ist jetzt da"
Eine for-Schleife
erhält eine Liste von Werten und führt die Kommandos mit
jedem dieser Werte in der Laufvariablen
aus.
for var in liste
do
kommandos
done
for argument in
$*
do
echo $argument
done
Schleifen können vorzeitig abgebrochen werden:
for b in 1 2 3 4 5
do
if [ $b -eq 2 ]
then
continue
fi
if [ $b -eq 4 ]
then
break
fi
echo $b
done
Die Variable einer case-Anweisung
wird der Reihe nach mit den Mustern verglichen und nur die zum
ersten passenden Muster gehörenden Befehle werden ausgeführt.
Die Muster haben die gleiche Syntax wird die Dateinamen-Expansion.
Alternativen können durch |
angegeben werden. Das Muster *
trifft immer zu und dient am Ende der Anweisung dazu, Befehle
auszuführen, wenn keins der anderen Muster passte.
#
# Schnittstelle zu cal, erlaubt cal jan 1993
case $m in
Jan*|jan*) m=1 ;;
Feb*|feb*) m=2 ;;
Mar*|mar*) m=3 ;;
Apr*|apr*) m=4 ;;
Mai*|mai*) m=5 ;;
Jun*|jun*) m=6 ;;
Jul*|jul*) m=7 ;;
Aug*|aug*) m=8 ;;
Sep*|sep*) m=9 ;;
Okt*|okt*) m=10 ;;
Nov*|nov*) m=11 ;;
Dez*|dez*) m=12 ;;
*) ;; # alles andere, z.B
eine Zahl
esac
/usr/bin/cal $m $y
liest eine Zeile von der Standard-Eingabe und weist die
einzelnen Worte den Variablen zu.
Wenn mehr Worte als Variablen vorhanden sind, erhält die
letzte Variable den Rest der Zeile;
wenn die Eingabe zu kurz ist, bleiben die letzten Variablen leer.
| Vorlesungsübersicht | Grafische Anwendungen |