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 2 Variablen
  gp 2.1 Grundlagen
    gp 2.1.1 Zugriff auf den Wert einer Variablen
    gp 2.1.2 Variablen-Interpolation
  gp 2.2 Zahlen
    gp 2.2.1 Integer-Arithmetik (Bourne-Shell, Bash und Korn-Shell)
    gp 2.2.2 Integer-Arithmetik (Bash und Korn-Shell only)
    gp 2.2.3 bc – Rechnen mit Fließkommazahlen und mathematische Funktionen
  gp 2.3 Zeichenketten
    gp 2.3.1 Stringverarbeitung
    gp 2.3.2 Erweiterte Funktionen für Bash und Korn-Shell
  gp 2.4 Quotings und Kommando-Substitution
    gp 2.4.1 Single und Double Quotings
    gp 2.4.2 Kommando-Substitution – Back Quotes
  gp 2.5 Arrays (Bash und Korn-Shell only)
    gp 2.5.1 Werte an Arrays zuweisen
    gp 2.5.2 Eine Liste von Werten an ein Array zuweisen (Bash)
    gp 2.5.3 Eine Liste von Werten an ein Array zuweisen (Korn-Shell)
    gp 2.5.4 Zugreifen auf die einzelnen Elemente eines Arrays
  gp 2.6 Variablen exportieren
  gp 2.7 Umgebungsvariablen eines Prozesses
  gp 2.8 Shell-Variablen
  gp 2.9 Automatische Variablen der Shell
    gp 2.9.1 Der Name des Shellscripts – $0
    gp 2.9.2 Die Prozessnummer des Shellscripts – $$
    gp 2.9.3 Der Beendigungsstatus eines Shellscripts – $?
    gp 2.9.4 Die Prozessnummer des zuletzt gestarteten Hintergrundprozesses – $!
    gp 2.9.5 Weitere vordefinierte Variablen der Shell
    gp 2.9.6 Weitere automatische Variablen für Bash und Korn-Shell


Rheinwerk Computing

2.9 Automatische Variablen der Sheldowntop

Nach dem Aufruf eines Shellscripts versorgt Sie die Shell außerdem noch durch einer Reihe von Variablen mit Informationen zum laufenden Prozess.


Rheinwerk Computing

2.9.1 Der Name des Shellscripts – $0  downtop

Den Namen des aufgerufenen Shellscripts finden Sie in der Variablen $0. Bspw. folgendes Shellscript:

# Name : ichbin
echo "Mein Kommandoname ist $0"

Führen Sie dieses Script aus, bekommen Sie folgende Ausgabe zurück:

you@host > ./ichbin
Mein Kommandoname ist ./ichbin
you@host > $HOME/ichbin
Mein Kommandoname ist /home/you/ichbin

Diese Variable wird häufig für Fehlermeldungen verwendet, zum Beispiel um anzuzeigen, wie man ein Script richtig anwendet bzw. aufruft. Dafür ist selbstverständlich auch der Kommandoname von Bedeutung.


Hinweis   Die Formulierung »den Namen des aufgerufenen Shellscripts« trifft die Sache eigentlich nicht ganz genau. Wenn man bspw. den Befehl in der Konsole eingibt, bekommt man ja den Namen der Shell zurück. Somit könnte man wohl auch vom Namen des Elternprozesses des ausgeführten Befehls echo sprechen. Aber wir wollen hier nicht kleinlich werden.


Mit dieser Variablen können Sie übrigens auch ermitteln, ob ein Script mit einem vorangestellten Punkt gestartet wurde und entsprechend darauf reagieren:

you@host > . ./ichbin
Mein Kommandoname ist /bin/bash
you@host > sh
sh-2.05b$ . ./ichbin
Mein Kommandoname ist sh
sh-2.05b$ ksh
$ . ./ichbin
Mein Kommandoname ist ksh

Wird also ein Shellscript mit einem vorangestellten Punkt aufgerufen, so enthält die Variable $0 den Namen des Kommando-Interpreters.


Rheinwerk Computing

2.9.2 Die Prozessnummer des Shellscripts – $$  downtop

Die Variable $$ wird von der Shell durch die entsprechende Prozessnummer des Shellscripts ersetzt. Bspw. folgendes Shellscript:

# Name : mypid
echo "Meine Prozessnummer ($0) lautet $$"

Das Shellscript bei der Ausführung:

you@host > ./mypid
Meine Prozessnummer (./mypid) lautet 4902
you@host > . ./mypid
Meine Prozessnummer (/bin/bash) lautet 3234
you@host > ps
  PID TTY          TIME CMD
 3234 pts/38   00:00:00 bash
 4915 pts/38   00:00:00 ps

Durch ein Voranstellen des Punkte-Operators können Sie hierbei auch die Prozessnummer der ausführenden Shell bzw. des Kommando-Interpreters ermitteln.


Rheinwerk Computing

2.9.3 Der Beendigungsstatus eines Shellscripts – $?  downtop

Diese Variable wurde bereits in Zusammenhang mit exit behandelt. In dieser Variablen finden Sie den Beendigungsstatus des zuletzt ausgeführten Kommandos (oder eben auch Shellscripts).

you@host > cat gibtesnicht
cat: gibtesnicht: Datei oder Verzeichnis nicht gefunden
you@host > echo $?
1
you@host > ls -l | wc -l
31
you@host > echo $?
0

Ist der Wert der Variablen $? ungleich 0, ist beim letzten Kommandoaufruf ein Fehler aufgetreten. Wenn $? gleich 0 ist, deutet dies auf einen fehlerlosen Kommandoaufruf hin.


Rheinwerk Computing

2.9.4 Die Prozessnummer des zuletzt gestarteten Hintergrundprozesses – $!  downtop

Wenn Sie in der Shell ein Kommando oder ein Shellscript im Hintergrund ausführen lassen (&), wird die Prozessnummer in die Variable $! gelegt. Anstatt also nach der Nummer des zuletzt gestarteten Hintergrundprozesses zu suchen, können Sie auch einfach die Variable $! verwenden. Im folgenden Beispiel wird diese Variable verwendet, um den zuletzt gestarteten Hintergrundprozess zu beenden.

you@host > find / -print > ausgabe 2> /dev/null &
[1] 5845
you@host > kill $!
you@host >
[1]+  Beendet                 find / -print >ausgabe 2>/dev/null

Rheinwerk Computing

2.9.5 Weitere vordefinierte Variablen der Shell  downtop

Es gibt noch weitere automatische Variablen der Shell, die allerdings erst in Kapitel 3, Parameter und Argumente, ausführlicher behandelt werden. Tabelle 2.10 gibt bereits einen Überblick.


Tabelle 2.10   Automatisch vordefinierte Variablen der Shell

Variable(n) Bedeutung
$1 bis $n Argumente aus der Kommandozeile
$* Alle Argumente aus der Kommandozeile in einer Zeichenkette
$@ Alle Argumente aus der Kommandozeile als einzelne Zeichenketten (Array von Zeichenketten)
$# Anzahl aller Argumente in der Kommandozeile
$_ (Bash only) Letztes Argument in der Kommandozeile des zuletzt aufgerufenen Kommandos


Rheinwerk Computing

2.9.6 Weitere automatische Variablen für Bash und Korn-Shell  toptop

In diesem Abschnitt finden Sie noch weitere automatische Variablen der Shell. Sicherlich wird sich der ein oder andere dabei fragen, warum ich diese Variablen bei den automatischen und nicht bei den vordefinierten Shell-Variablen aufführe. Der Grund ist relativ einfach: Die folgenden Variablen werden von der Shell ständig neu gesetzt. Diese Variablen stehen Ihnen aber nur für die Bash und die Korn-Shell zur Verfügung. Bestes Beispiel, Ihnen dieses »ständig neu gesetzt« zu beschreiben, ist die automatische Variable RANDOM, welche mit einer Zufallszahl zwischen 0 bis 32767 belegt ist. Wäre dies eine vordefinierte Shell-Variable wie bspw. HOME, so würde sich der Wert dieser Variable ja nicht ändern. Wenn Sie RANDOM erneut verwenden, werden Sie feststellen, dass sich dieser Wert beim nächsten Aufruf in der Shell verändert hat – also wird diese Variable ständig neu gesetzt.

you@host > echo $RANDOM
23957
you@host > echo $RANDOM
13451
you@host > echo $RANDOM
28345
you@host > RANDOM=1
you@host > echo $RANDOM
17767

Hierzu finden Sie im Folgenden die Tabelle 2.11 bis Tabelle 2.13, die Ihnen weitere automatische Variablen vorstellen, die ständig von der Shell neu gesetzt werden.

Automatische Variablen für Bash und Korn-Shell


Tabelle 2.11   Ständig neu gesetzte Variablen (Bash und Korn-Shell)

Variable Bedeutung
LINENO Diese Variable enthält immer die aktuelle Zeilennummer im Shellscript. Wird die Variable innerhalb einer Scriptfunktion aufgerufen, entspricht der Wert von LINENO den bis zum Aufruf innerhalb der Funktion ausgeführten einfachen Kommandos. Außerhalb von Shellscripts ist diese Variable nicht sinnvoll belegt. Wird die LINENO-Shell-Variable mit unset gelöscht, kann sie nicht wieder mit ihrer automatischen Funktion erzeugt werden.
OLDPWD Der Wert ist das zuvor besuchte Arbeitsverzeichnis; wird vom Kommando cd gesetzt.
OPTARG Der Wert ist das Argument der zuletzt von getopts ausgewerteten Option.
OPTIND Enthält die Nummer (Index) der zuletzt von getopts ausgewerteten Option
PPID Prozess-ID des Elternprozesses (Parent Process ID = PPID); eine Subshell, die als Kopie einer Shell erzeugt wird, setzt PPID nicht.
PWD Aktuelles Arbeitsverzeichnis
RANDOM Pseudo-Zufallszahl zwischen 0 bis 32767; weisen Sie RANDOM einen neuen Wert zu, so führt dies dazu, dass der Zufallsgenerator neu initialisiert wird.
REPLY Wird vom Shell-Kommando read gesetzt, wenn keine andere Variable als Rückgabeparameter benannt ist und bei Menüs (select) enthält REPLY die ausgewählte Nummer.
SECONDS Enthält die Anzahl von Sekunden, die seit dem Start (Login) der aktuellen Shell vergangen ist. Wird SECONDS ein Wert zugewiesen, erhöht sich dieser Wert jede Sekunde automatisch um eins.

Automatische Variablen nur für die Korn-Shell


Tabelle 2.12   Ständig neu gesetzte Variable (Korn-Shell only)

Variable Bedeutung
ERRNO Fehlernummer des letzten fehlgeschlagenen Systemaufrufs

Automatische Variablen nur für die Bash


Tabelle 2.13   Ständig neu gesetzte Variablen (Bash only)

Variable Bedeutung
BASH Kompletter Pfadname der aktuellen Shell
BASH_VERSION Versionsnummer der Shell
EUID Beinhaltet die effektive Benutzerkennung des Anwenders. Diese Nummer wird während der Ausführung von Programmen, bei denen das SUID-Bit aktiviert ist, gesetzt.
HISTCMD Enthält die Nummer des aktuellen Kommandos aus der Historydatei
HOSTTYPE Typ des Rechners. Für Linux kommen u. a. die Typen i386 oder i486 in Frage.
OSTYPE Name des Betriebssystems. Da allerdings die Variable OSTYPE den aktuellen Wert zum Übersetzungszeitpunkt der Bash anzeigt, ist dieser Wert nicht zuverlässig. Re-kompilieren Sie bspw. alles neu, ändert sich dieser Wert nicht mehr. Zuverlässiger ist da wohl das Kommando uname.
PROMPT_COMMAND Hier kann ein Kommando angegeben werden, das vor jeder Eingabeaufforderung automatisch ausgeführt wird.
SHLVL Steht für den Shell-Level. Bei jedem Aufruf einer neuen Shell in der Shell wird der Shell-Level um eins erhöht; der Wert 2 kann z. B. innerhalb eines Scripts bestehen, das aus einer Login-Shell gestartet wurde. Eine Möglichkeit, zwischen den Levels zu wechseln, gibt es nicht.
UID Die User-ID des Anwenders. Diese Kennung ist in der Datei /etc/passwd dem Benutzernamen zugeordnet.



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