Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 6 Funktionen
  gp 6.1 Definition
    gp 6.1.1 Definition (Bash und Korn-Shell only)
    gp 6.1.2 Funktionsaufruf
    gp 6.1.3 Funktionen exportieren
    gp 6.1.4 Aufrufreihenfolge
    gp 6.1.5 Who is who
    gp 6.1.6 Aufruf selbst bestimmen
    gp 6.1.7 Funktionen auflisten
  gp 6.2 Funktionen, die Funktionen aufrufen
  gp 6.3 Parameterübergabe
    gp 6.3.1 FUNCNAME (Bash only)
  gp 6.4 Rückgabewert aus einer Funktion
    gp 6.4.1 Rückgabewert mit return
    gp 6.4.2 Rückgabewert mit echo und einer Kommando-Substitution
    gp 6.4.3 Rückgabewert ohne eine echte Rückgabe (lokale Variable)
    gp 6.4.4 Funktionen und exit
  gp 6.5 Lokale contra globale Variablen
    gp 6.5.1 Lokale Variablen (Bash und Korn-Shell only)
  gp 6.6 alias und unalias
  gp 6.7 Autoload (Korn-Shell only)


Rheinwerk Computing

6.5 Lokale contra globale Variabledowntop

In Abschnitt 6.4.3 konnten Sie bereits sehen, dass man ohne Probleme von der Hauptfunktion aus auf Variablen einer Funktion zugreifen kann. Dabei handelt es sich um globale Variablen. Aber wie »global« eigentlich globale Variablen in einer Funktion sind, soll Ihnen das folgende Beispiel zeigen:

# Demonstriert die Verwendung von Parametern
# Name: afunc14
# Funktion value1
value1() {
   val1=10
}
# Hauptprogramm
echo $val1

In diesem Beispiel wird nicht wie erwartet der Wert 10 von »val« ausgegeben, sondern ein leerer String. Die globale Variable »val1« steht Ihnen erst zur Verfügung, wenn Sie die Funktion »value1« aufrufen, da erst durch den Aufruf der Funktion »value1« die Variable »val1« mit einem Wert belegt wird.

# Demonstriert die Verwendung von Parametern
# Name: afunc15
# Funktion value1
value1() {
   val1=10
}
# Hauptprogramm
value1
echo $val1

Jetzt wird auch der Wert von »val1« gleich 10 ausgegeben. Wünschen Sie aber eine globale Variable, die auch sofort der Hauptfunktion zur Verfügung steht, müssen Sie diese eben noch vor der ersten Verwendung außerhalb einer Funktion definieren.

# Demonstriert die Verwendung von Parametern
# Name: afunc16
# Globale Variable
val1=11
# Funktion value1
value1() {
   val1=10
}
# Hauptprogramm
echo $val1
value1
echo $val1

Das Script bei der Ausführung:

you@host > ./afunc16
11
10

Sie müssen sich immer vor Augen halten, dass sich jede Veränderung einer globalen Variablen auch auf diese Variable bezieht. Des Weiteren sind globale Variablen bei immer länger werdenden Scripts eher kontraproduktiv, da man schnell die Übersicht verlieren kann. Besonders bei häufig verwendeten Variablennamen wie »i«, »var«, »file«, »dir« usw. kann es schnell passieren, dass man dieselbe Variable im Script in einer anderen Funktion nochmals verwendet. Solche Doppelungen wurden früher (und heute immer noch) in den Shells mit speziellen Variablennamen vermieden. Hieß bspw. die Funktion »readcmd«, verwendete man Variablen mit dem Präfix »read_var1«, »read_var2« usw. Dadurch, dass man im Variablennamen ein paar Buchstaben des Funktionsnamens voranstellt, lassen sich viele Fehler vermeiden. Ein Beispiel:

# Funktion connect
connect {
   con_file=$1
   con_pass=$2
   con_user=$3
   con_i=0
   ...
}
# Funktion insert
insert {
   ins_file=$1
   ins_pass=$2
   ins_user=$3
   ins_i=0
   ...
}
...

Rheinwerk Computing

6.5.1 Lokale Variablen (Bash und Korn-Shell only)  toptop

In Bash und Korn-Shell können Sie lokale Variablen innerhalb von Funktionen (und nur dort) definieren. Hierzu müssen Sie nur der Variablen bei der Definition das Schlüsselwort local voranstellen.

local var=wert

Eine so definierte Variable hat Ihre Lebensdauer somit auch nur innerhalb der Funktion, in der diese erzeugt wurde. Beendet sich die Funktion, verliert auch die Variable ihre Gültigkeit und zerfällt. Da macht es auch nichts mehr aus, wenn Sie in Ihrem Script eine globale Variable mit demselben Namen verwenden, wie ihn die lokale Variable hat. Mithilfe von lokalen Variablen können Sie eine Variable in einer Funktion vor dem Rest des Scripts verstecken.

Hier ein Beispiel, das den Einsatz von lokalen Variablen demonstriert:

# Demonstriert die Verwendung von Parametern
# Name: afunc17
# Globale Variable
var="ich bin global"
# Funktion localtest
localtest() {
   local var="ich bin local"
   echo $var
}
# Hauptfunktion
echo $var
localtest
echo $var

Das Script bei der Ausführung:

you@host > ./afunc17
ich bin global
ich bin local
ich bin global

Hätten Sie das Schlüsselwort local nicht verwendet, so würde die Ausgabe des Scripts wie folgt aussehen:

you@host > ./afunc17
ich bin global
ich bin local
ich bin local

Rufen Sie aus einer Funktion eine weitere Funktion auf, steht dieser Funktion ebenfalls die lokale Variable zur Verfügung – auch wenn eine gleichnamige globale Variable hierzu existieren würde.

# Demonstriert die Verwendung von Parametern
# Name: afunc18
# Globale Variable
var="ich bin global"
# Funktion localtest
localtest() {
   local var="ich bin local"
   alocaltest
}
#Funktion alocaltest
alocaltest() {
   echo $var
}
# Hauptfunktion
localtest

Das Script bei der Ausführung:

you@host > ./afunc18
ich bin local


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
 << zurück
  
  Zum Katalog
Zum Katalog: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Katalog: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Katalog: Linux Handbuch






 Linux Handbuch


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de