name ()
{
Anweisungen der Function
[ return [n] ] # Achtung: exit beendet das script
}
eine bash-Function kann überall stehen, muß aber vor der Benutzung definiert werden.
es gibt zwei Formen der Definition. In beiden Formen müssen die geschweiften Klammern von Blanks oder newline eingerahmt sein.
Erste Version, function gefolgt von functionname gefolgt von {
function show {
echo "function body"
}
Zweite Version, folgt der C Syntax functionname gefolgt von () gefolgt von {
show () {
echo " function body "
}
Achtung: in der () werden keine Paramter definiert.Functions dürfen nicht leer sein.
function show { }
bash: Syntaxfehler beim unerwarteten Wort `}'
Variablen in der Bash sind global und somit in Functions bekannt und veränderbar.
Die Änderung ist global. Soll der Scope der Variablen auf die Funktion begrenzt werden, dann werden sie in der Function mit dem builtin local definiert
v1=100
v2=10
function add {
local v1=1999
erg=$(( $v1 + $v2 ))
echo " aus function $v1 + $v2 = $erg "
}
add
echo " nach function $v1 + $v2 = $erg "
aus function 1999 + 10 = 2009 # v1 in der Function ist local
nach function 100 + 10 = 2009 # v1 nach der Function ist global,
# da aber erg in der Function im globalen Scope liegt,
# wird 2009 ausgegeben.
die Anweisung erg=$(( $v1 + $v2 )) ist eine Rechenanweisung. Sie speichert ihr Resultat in der Variablen erg.
Wie man sieht,
Parameter können an Functions übergeben werden. Sie kommen dort als positional Parameter $1 .. $n an , Auch sind sie alle als $* zugreifbar
function show () {
echo "aus function " $2 $1 $3
echo $*;
}
show test parameter übergabe
aus function übergabe test parameter
test parameter übergabe
function summe_zahlen () {
(( summe=summe + cnt ))
echo $cnt $summe
(( cnt++)); summe_zahlen
}
summe_zahlen
1 1
2 3
3 6
4 10
5 15
6 21
7 28
8 36
9 45
10 55
bash: summe_zahlen: maximale Funktionsschachtelungstiefe überschritten (10)
source filename [arguments] oder die Kurzform . filename [arguments]Achtung der Punkt ist hier nicht das Kennzeichen für eine hidden File. Zwischen dem Punkt und dem Filename muß ein Blank stehen.
1: |
|
1: |
|
1: |
|
function name
{
Anweisungen der Function
[ return [n] ]
}
# liefert n an den Caller zurück
# wurde n nicht angegeben wird der Status der letzten Anweisung zurückgeliefert
# Der Rückgabewert kann in $? abgefragt werden.
# Achtung: exit beendet das script
function pos
{ print $(tput cup $1 $2)"\c"
}
Eine Deklaration kann erfolgen durch
typeset f[txu] name [name] ...
f Funktionsnamen anzeigen oder Attribute
setzen - bzw löschen +
t xtrace Option für die Funktion setzen -
oder löschen +
x Funktion soll bei shell-scripts erhalten bleiben,
die die ksh nicht separat aufrufen
u name bezieht sich auf eine Funktion die bisher
noch nicht definiert ist (autoload).
Funktionen können in einer separaten Datei abgelegt werden, die erst bei der ersten Ausführung der Funktion in das Environment geladen wird. Jede Funktion hat eigene positional Parameter. Im aufgerufenen Script muß die Funktion (vor der Verwendung) als autoload deklariert werden (autoload ist ein preset alias für typeset -fu ) Die Environmentvariable FPATH muß einen Pfad zum Verzeichnis der Funktionen enthalten. Werden mehrere Pfade angegeben, so ist der Pathstring wie bei PATH durch : zu trennen FPATH=/usr/local/func_lib
1: |
|