Shell-Workshop (10)

Status
Für weitere Antworten geschlossen.

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
In diesem Workshop geht es um lokale Variablen und return-Werte, um export-Listen und exit-Status.

Alle in einem Shell-Skript oder in einer Shell-Session angelegten Shell-Variablen sind innerhalb der Datei bzw. der Session global zugreifbar und verwendbar. Man kann die Variablen also überall lesen, neu besetzen und darüber Werte austauschen.
Rich (BBCode):
Syno> A=abc
Syno> f1() { echo $A; A=123; }
Syno> f1
abc
Syno> echo $A
123

Ich habe jetzt mal die Shell-Variablen ohne einfache Hochkomma und die Referenzierung ohne {} geschrieben ... damit man sich auch einmal an diese Darstellung gewöhnt, weil sie in vielen Skripten auch so ist.

Falls man in einer Shell-Funktion Shell-Variablen nur temporär benötigt, kann man dies mit dem Kommando (der Direktive) 'local' vereinbaren.

Rich (BBCode):
Syno> A=123
Syno> f1 () { local A; A=456; echo $A; }
Syno> f1
456
Syno> echo $A
123

Eine Shell-Funktion liefert zum Abschluss ihres Aufrufs auch einen Status-Wert, welcher in Kommando-Reihungen oder in Kontrollstrukturen genutzt werden kann. Normalerweise wird der Wert '0' gesetzt. Mit der Direktive 'return' kann man aber auch einen anderen Wert setzen und damit eine Verarbeitungslogik beeinflussen.

Rich (BBCode):
Syno> f5() { echo 'Hallo'; }
Syno> f5
Hallo
Syno> echo $?
0
Syno> f6() { return 2 ; }
Syno> f6
Syno> echo $?
2

Üblich für den return-Wert sind positive ganzzahlige Werte bin 2^31-1 möglich. '0' gilt als 'true' in der Shell-Logik.

In Shell-Skripten, also weiteren Dateien, sind Shell-Variablen normalerweise nicht global. Um sie einen aufgerufenes Shell-Skript bekannt zu geben (benutzbar zu machen), kann man sie auf die Shell-Variablen-Export-Liste mit der Direktiven 'export' setzen. 'export' alleine zeigt die gesamte aktuelle Export-Liste an.

Rich (BBCode):
Syno> Z=123
Syno> cat >skript
echo $Z
Syno> chmod +x skript
Syno> ./skript

Syno> export Z
Syno> ./skript
123
Syno> export
export HOME='/root'
export LOGNAME='root'
export OLDPWD='/root'
export PAGER='more'
export PATH='/usr/sbin:/bin:/usr/bin:/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin:/opt/sbin'
export PGDATA='/volume1/@database/pgsql'
export PWD='/root/workshop'
export SHELL='/bin/ash'
export TERM='cons25'
export USER='root'
export Z='123'

Veränderungen innerhalb eines aufgerufenen Skriptes an exportierten Variablen werden in der aufrufenden Shell nicht bemerkt. Es ist also ein etwas einseitiges Weiterreichen in die Skripte, aber keine Rückgaben möglich.

Rich (BBCode):
Syno> export Z='123'
Syno> cat >skript
echo $Z
Z=xyz
echo $Z
Syno> ./skript
123
xyz
Syno> echo $Z
123

Eine Shell-Skript-Datei endet in ihrer Ausführung entweder durch das Erreichen des Dateiendes oder der Direktiven 'exit'. Mit 'exit' kann man einen Exit-Status an die aufrufende Shell als Rückgabe veranlassen. Eine fehlende Angabe wird als Exit-Status '0' interpretiert.

Rich (BBCode):
Syno> cat >skript
exit 2
Syno> ./skript
Syno> echo $?
2

=======

Viel Spaß beim Shell-Skripten.

Itari


=========================================
Sinnvollerweise sind die Shell-Workshops aufeinander aufgebaut.
Shell-Workshop (9)
Shell-Workshop (11)
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat