Next: Über dieses Dokument ...
Up: shell
Previous: Schleifen
Man kann sich auch Funktionen definieren:
[ function ] name () {
komm1
...
[return [n]]
}
Wenn am Ende der Funktion return
steht, liefert sie den Parameter zu return
oder
den wert des letzten Ausdrucks.
Diese Funktion wird dann mit name param1, ..., paramn
aufgerufen, auf sie wird mit
$1, ..., $n
, zugegriffen, allerdings werden sie außerhalb meist nicht geändert! Eine
Funktion wird im aktuellen Shellzusammenhang ausgeführt, d. h. es gibt keine Subshell. Man kann
Funktionen unendlich tief rekursiv verschachteln.
[britta@Wintermute shell]$ cat carthy
carthy() {
x="$1"
if [ "$x" -gt 100 ]
then
y=`expr "$x" - 10`
else
u=`carthy \`expr "$x" + 11\``
y=`carthy "$u"`
fi
echo "$y"
}
for i
do
carthy "$i"
done
[britta@Wintermute shell]$ carthy 10 50 100 101 500
91
91
91
91
490
[britta@Wintermute shell]$ time carthy 1
91
real 0m6.654s
user 0m2.380s
sys 0m3.360s
[britta@Wintermute shell] $cat classify
#diese Funktion kuckt nach, ob die Datei ein "Textfile" ist,
#Fehler werden nach dem Rueckgabewert klassifiziert
#2 = link, 3 = dir, 4 = exec, 5 = compressed (mit file && grep...)
checkfile() {
file="$1"
[ -d "$file" ] && return 3
[ -L "$file" ] && return 2
[ -x "$file" ] && return 4
file "$file" | grep -q compressed && return 5
return 0
}
for i
do
checkfile "$i" && echo "$i" ist ok
done
[britta@Wintermute shell] $classify *
#shell2.tex# ist ok
shell.aux ist ok
shell.dvi ist ok
shell.log ist ok
shell.tex ist ok
shell2.tex ist ok
Next: Über dieses Dokument ...
Up: shell
Previous: Schleifen
Britta Koch
1999-06-18