Next: Erweiterung
Up: bash
Previous: Gruppen und Kontrollstrukturen:
Aus dem Blickwinkel des Shellprogrammierers ist die zentrale Rolle von
Variablen unmittelbar klar. Variable sind symbolische Namen für
Platzhalter, in denen Werte (Zahlen oder Zeichenketten) gespeichert
werden können.
Eine Variable kann durch eine Zuweisung der folgenden Form erzeugt werden:
Name =[
Wert]
Als Namen für Variable kommen beliebige alphanumerische (ASCII-)
Zeichenketten in Frage, die mit einem Buchstaben beginnen. Der
Unterstrich `_' wird zu den erlaubten Buchstaben gerechnet.
Zwischen den Bestandteilen der Zuweisung dürfen keine Leerzeichen stehen.
Wenn kein Wert angegeben ist, wird der Variablen die leere Zeichenkette
(Nullstring) zugewiesen.
Es ist nicht notwendig (aber möglich), Variable zu
deklarieren. Automatisch erzeugte Variable speichern alle ihnen
zugewiesenen Werte als Zeichenketten. Die Interpretation des
Inhalts einer Variablen erfolgt ``aus dem Zusammenhang''. Das
heißt, in arithmetischen Ausdrücken werden Ziffernfolgen
automatisch als Zahlen interpretiert. Durch ausdrückliche
Deklaration einer Variablen als Integer (mit der Shellfunktion
declare -i) wird erreicht, daß jede Zuweisung automatisch
der arithmetischen Erweiterung unterworfen wird. Damit ist
garantiert, daß eine solche Variable nach ihrer Initialisierung
immer Zahlen enthält.
Der Zugriff auf den Wert eines Parameters bzw. die Übergabe eines
Parameters erfolgt durch den Operator ` $' gefolgt von der
Parameterbezeichnung.
Ein Parameter gilt als gesetzt, wenn ihm ein Wert zugewiesen
wurde. Eine leere Zuweisung -- der Nullstring '
' -- gilt als Wert in diesem Sinne. Wenn eine Variable
gesetzt ist, kann sie nur durch das unset-Kommando entfernt
werden.
Shellvariable haben auch
in der interaktiven Shell eine große Bedeutung.
- Zum einen können bestimmte Variable aus der allgemeinen
Prozeßumgebung (Environment) der Shell wie Shellvariable benutzt
werden. Einige Umgebungsvariablen existieren bereits, wenn die Shell
aufgerufen wird. Neue Umgebungsvariable können mit dem
export-Shellkommando (-> Seite
) erzeugt werden. Die Prozeßumgebung wird vom
Elternprozeß an die Kinder vererbt, so daß alle Umgebungsvariablen
der bash an die von dieser Shell gestarteten Prozesse
weitergegeben werden. Die Kindprozesse können dann aus ihrer
Prozeßumgebung wichtige Informationen über das System, in dem sie
laufen, erhalten.
- Zum anderen benutzt die Shell selbst Variable nicht nur als
Platzhalter in Shellprogrammen, sondern sie verwendet bestimmte
Shellvariable zur Anpassung ihres eigenen Verhaltens an eine
bestimmte Systemumgebung. Der Benutzer kann diese Variablen
verändern und damit das Erscheinungsbild der Shell seinen
Bedürfnissen und seinem Geschmack entsprechend einrichten.
Auf der Benutzerebene können Umgebungsvariable wie Shellvariable
beliebig erzeugt, gelesen und verändert werden. Deshalb erscheinen die
Umgebungsvariablen als eine Untermenge der Shellvariablen.
Umgebungsvariable können mit dem printenv-Kommando oder dem
export-Shellkommando angezeigt werden. Sämtliche definierten
Shellvariablen werden mit dem set-Shellkommando ausgegeben.
Die folgenden Variablen werden von der Shell ausgewertet. In einigen
Fällen wird die Variable mit einem Standardwert initialisiert.
- IFS
- ist der ``interne Feldseparator''. Alle Zeichen
dieser Shellvariablen werden als Trenner von Wörtern erkannt. Die
Standardbelegung für IFS ist Leerzeichen, Tabulator und
Zeilenende.
- PATH
- enthält eine durch Doppelpunkt getrennte Liste von
Verzeichnissen. Wenn ein einfaches Kommando nicht als internes
Shellkommando erkannt wird und nicht mit komplettem Pfadnamen (das
ist der Pfad vom aktuellen Verzeichnis oder vom Wurzelverzeichnis
aus) angegeben wird, dann sucht die Shell in allen Verzeichnissen
der PATH-Variablen nach einem Programm mit passendem Namen und
führt es aus.
Ein einzelner Punkt anstelle des Wurzelverzeichnisses steht für das
aktuelle Verzeichnis. Eine Tilde `~
' steht für das
Heimatverzeichnis des Anwenders (-> Seite
).
Die PATH-Variable wird in der Regel von der
Systemverwalterin in der Datei /etc/profile für alle
Login-Shells gemeinsam auf einen bestimmten Wert gesetzt. Dieser
Wert kann vom Benutzer beliebig verändert werden. Die PATH-
Variable kann nicht mit dem unset-Shellkommando gelöscht
werden.
Aus Gründen der Systemsicherheit ist es sinnvoll, das aktuelle
Verzeichnis (bezeichnet durch einen Punkt) nur als letztes der zu
durchsuchenden Verzeichnisse anzugeben. Anderenfalls könnte ein
Standardprogramm aus dem Systempfad versehentlich mit einem
gleichnamigen Kommando im aktuellen Verzeichnis verwechselt
werden.
- HOME
- ist das Heimatverzeichnis des aktuellen Benutzers.
Dieses Verzeichnis wird in der Datei /etc/passwd bestimmt und
von login automatisch in die Variable HOME geschrieben.
Das in HOME gespeicherte Verzeichnis ist der Standardwert für
das cd-Shellkommando (-> Seite
).
- CDPATH
- ist eine durch Doppelpunkt getrennte Liste von
Verzeichnissen. Wenn beim cd-Shellkommando kein absoluter
Verzeichnisname und kein Verzeichnis relativ zum aktuellen
Verzeichnis benannt wird, werden alle Verzeichnisse im CDPATH
nach einem passenden Verzeichnis durchsucht. In das erste passende
Verzeichnis wird gewechselt.
- ENV
- enthält den Namen einer Datei, die Kommandos zur
Initialisierung für die Shellumgebung beim Bearbeiten von
Shellscripts enthält. (z.B. die Datei
~
/.bashrc)
- MAIL
- enthält den Namen der Datei, in der die
elektronische Post für den Benutzer gespeichert wird. Wenn diese
Datei nicht leer ist, wird der Anwender darauf hingewiesen, daß Post
für ihn da ist.
- MAILCHECK
- spezifiziert die Zeitintervalle, nach denen
die Shell prüft, ob Post da ist. Die Voreinstellung ist 60 Sekunden.
- MAILPATH
- ist eine durch Doppelpunkt getrennte Liste von
(absoluten) Dateinamen, in denen Post für den Benutzer ankommen
kann. Zu jeder Datei kann eine durch ` ?' eingeleitete
Zeichenkette angegeben werden, die auf dem Bildschirm ausgegeben
wird, wenn in der entsprechenden Datei Post angekommen ist.
- MAIL_WARNING
- ist ein Schalter. Ist die Variable
gesetzt (egal, welcher Wert), erfolgt eine Warnung, wenn auf die
Postdatei zugegriffen wurde. Damit kann sowohl festgestellt werden,
ob neue Mail angekommen ist, als auch jeder (möglicherweise
illegale) Lesezugriff auf die Mailbox überwacht werden.
Dieser Schalter funktioniert nur, wenn die Mailbox in einem
Verzeichnis liegt, dessen Dateisystem die Zugriffszeit verwaltet
(nicht Minix oder Extended1).
- PS1
- ist die (rohe) Zeichenkette, die als
Eingabeaufforderung (Prompt) die
Arbeitsbereitschaft der Shell anzeigt. Die Variable kann eine
Reihe symbolischer Namen enthalten, die
vor der Ausgabe nach den im Abschnitt ``Eingabeaufforderung'' (Seite
) erläuterten Regeln erweitert werden. Die
Voreinstellung ist `\
$'.
- PS2
- enthält die Zeichenkette für die sekundäre
Eingabeaufforderung. Sie wird genau wie PS1 erweitert. Die
sekundäre Eingabeaufforderung erscheint, wenn zu einem gegebenen
Kommando interaktiv über die Shell weitere Kommandos oder Parameter
von der Tastatur gelesen werden sollen. (Zum Beispiel nach dem
Kommando for) Die Voreinstellung ist `> '.
\
PS3
- enthält den Prompt, mit dem die Eingabe bei der
select-Konstruktion angefordert wird (-> Seite
). Voreinstellung ist ` #?'.
- PS4
- wird zur Anzeige der erweiterten Kommandos mit der
Option ` -x' benutzt (-> set, Seite
).
Voreinstellung ist `+'.
- HISTSIZE
- setzt die Anzahl der im Kommandozeilenspeicher
erinnerten Zeilen fest. Alle älteren Zeilen werden vergessen.
- HISTFILE
- benennt eine Datei, in die der Inhalt des
Kommandozeilenspeichers beim Beenden der Shell automatisch gesichert
wird. Der Kommandozeilenspeicher wird beim Start einer neuen Shell
aus dieser Datei aufgefüllt. Voreinstellung für HISTFILE ist
~
/bash_history Wenn Sie (z.B. im X Window System)
mehrere Shells gleichzeitig mit derselben Sicherungsdatei benutzen,
bleiben nur die Kommandozeilen der zuletzt beendeten Shell erhalten.
- HISTFILESIZE
- bestimmt die Anzahl der im HISTFILE
zwischen zwei Sitzungen gespeicherten Kommandozeilen. Alle älteren
Zeilen gehen verloren.
- OPTERR
- ist ein Schalter. Wenn die Variable den Wert 1
enthält, werden die Fehlermeldungen der getopts-Shellfunktion
ausgegeben. Enthält sie eine 0, werden die Fehlermeldungen
unterdrückt.
- PROMPT_COMMAND
- benennt ein Kommando, das vor jeder
Eingabeaufforderung automatisch ausgeführt wird.
- IGNOREEOF
- hat nur eine Bedeutung, wenn die Shell
interaktiv läuft. Wenn die Variable eine ganze Zahl enthält, so
wird diese Anzahl von `EOF'-Zeichen (CTRL-D) für das Dateiende bzw. das Ende der
Eingabe abgewartet, bevor die Shell verlassen wird. Zu jedem `EOF'
wird der Hinweis ausgegeben, daß die Shell mit logout
verlassen werden soll.
Wenn die Variable leer ist oder keine Zahl enthält, so ist die
Voreinstellung 10. Wenn die Variable nicht gesetzt ist, führt jedes
EOF-Zeichen sofort zum Verlassen der Shell.
- TMOUT
- mit dieser Variablen kann die Shell veranlaßt
werden, nach einer bestimmten Zeit ohne Benutzeraktivität, also ohne
Eingabe, automatisch zu beenden. Nur wenn die Variable eine Zahl
enthält, wird diese Anzahl Sekunden auf die Eingabe gewartet.
- FCEDIT
- benennt einen anderen Editor als vi als
Standardeditor für das fc-Shellkommando (-> Seite
).
- FIGNORE
- kann eine durch Doppelpunkte getrennte Liste von
Dateiendungen enthalten, die bei der automatischen
Dateinamenerweiterung ignoriert werden sollen. Beispielsweise kann
diese Variable mit ``.o:.bak:.old:
~
'' belegt werden.
- INPUTRC
- enthält den Namen der Initialisierungsdatei für
readline (-> Seite
).
- notify
- ist ein Schalter. Wenn die Variable gesetzt ist,
wartet die Shell mit der Nachricht über die Beendigung eines
Hintergrundprozesses nicht bis zur nächsten Eingabeaufforderung,
sondern platzt sofort mit der Meldung heraus.
- HISTCONTROL oder history_control
- bestimmt,
welche Kommandos in den Kommandozeilenspeicher geschrieben werden.
Wenn die Variable das Wort ` ignorespace' enthält, werden nur
die Zeilen in den Speicher geschrieben, die nicht mit einem
Leerzeichen beginnen. Wenn die Variable das Wort ` ignoredups'
enthält, werden alle Zeilen, die der zuletzt gespeicherten Zeile
entsprechen, nicht gespeichert. ` ignoreboth' ist die
Kombination der beiden anderen Schalter. Wenn die Variable nicht
gesetzt ist oder irgendeinen anderen Wert enthält, werden alle
Kommandozeilen in den Kommandozeilenspeicher geschrieben.
- command_oriented_history
- ist ein Schalter. Wenn die
Variable gesetzt ist, versucht die Shell, alle Zeilen eines
mehrzeiligen Kommandos in einem History-Eintrag zu speichern.
- glob_dot_filenames
- ist ein Schalter. Wenn die Variable
gesetzt ist, werden auch Dateinamen, die mit einem Punkt beginnen,
in die Pfadnamenerweiterung einbezogen.
- allow_null_glob_expansion
- ist ein Schalter. Wenn die
Variable gesetzt ist, werden Muster, die bei der
Pfadnamenerweiterung nicht erweitert werden konnten, zu einer leeren
Zeichenkette erweitert, anstatt unverändert zu bleiben.
- histchars
- enthält zwei Zeichen zur Kontrolle der
Wiederholung von Kommandos aus dem Kommandozeilenspeicher. Das erste
Zeichen leitet eine Kommandozeilenerweiterung aus dem
Kommandozeilenspeicher ein. Die Voreinstellung ist ` !'. Das
zweite Zeichen kennzeichnet einen Kommentar, wenn es als erstes
Zeichen eines Wortes auftaucht. Ein solcher Kommentar wird bei der
Ausführung eines Kommandos ignoriert.
- nolinks
- ist ein Schalter. Wenn die Variable gesetzt ist,
folgt die Shell beim Wechseln des aktuellen Verzeichnisses mit dem
cd-Shellkommando nicht den symbolischen Links.
- HOSTFILE oder hostname_completion_file
-
ist der Name einer Datei mit dem gleichen Format wie die Datei
/etc/hosts. Die Einträge dieser Datei werden zur
Hostnamenerweiterung verwendet.
- noclobber
- ist ein Schalter. Wenn die Variable gesetzt
ist, können existierende Dateien nicht durch die Ausgabeumlenkungen
>, > & und <> überschrieben werden. Anhängen von Daten
an eine existierende Datei ist auch bei gesetztem noclobber-
Schalter möglich. Wie bei der C-Shell gibt es keine Möglichkeit,
diesen Schalter zu umgehen.
- auto_resume
- ist ein Schalter. Wenn die Variable gesetzt
ist, vergleicht die Shell ein einfaches Kommando ohne
Ein/Ausgabe-Umlenkung mit den im Hintergrund laufenden Prozessen.
Wenn ein Prozeß im Hintergrund einen passenden Namen hat, wird der
erste passende Prozeß in den Vordergrund geholt.
- no_exit_on_failed_exec
- ist ein Schalter. Wenn diese
Variable gesetzt ist, wird die Shell nicht durch ein abgebrochenes
mit exec aufgerufenes Kommando abgebrochen.
- cdable_vars
- ist ein Schalter. Nur wenn diese Variable
gesetzt ist, kann dem cd-Shellkommando das Verzeichnis, in das
gewechselt werden soll, auch in einer Variablen übergeben werden.
Die folgenden Variablen werden automatisch durch die Shell gesetzt.
Die meisten können vom Benutzer nicht verändert werden.
- PPID
- ist die Prozeßnummer des Elternprozesses der Shell.
- PWD
- ist das aktuelle Verzeichnis, wie es vom cd-
Shellkommando gesetzt wird.
- OLDPWD
- ist das zuletzt aktuelle Verzeichnis (wird
ebenfalls vom cd-Shellkommando gesetzt).
- REPLY
- wird vom Shellkommando read gesetzt, wenn
keine andere Variable als Rückgabeparameter benannt ist (-> Seite
).
- UID
- ist die Benutzerkennung des aktuellen Anwenders.
Diese Kennung ist in der Datei /etc/passwd dem Benutzernamen
zugeordnet.
- EUID
- ist die effektive Benutzerkennung des Anwenders.
Während der Ausführung von Programmen, bei denen das SUID-
Bit gesetzt ist, wird die effektive Benutzerkennung des Eigentümers
der Programmdatei gesetzt.
- BASH
- beinhaltet den kompletten Pfadnamen der aktuellen
Shell.
- BASH_VERSION
- beinhaltet die Versionsnummer der Shell.
- SHLVL
- steht für den Shell-Level. Bei jedem Aufruf einer
neuen Shell in der Shell wird der Shell-Level um eins erhöht. Eine
Möglichkeit, zwischen den Levels zu wechseln, besteht nicht.
- RANDOM
- liefert bei jeder Abfrage einen neuen
Pseudozufallswert. Die Folge von Pseudozufallszahlen
kann durch eine Zuweisung an RANDOM initialisiert werden.
Gleiche Initialwerte führen zu gleichen Zahlenfolgen.
- SECONDS
- liefert die Anzahl von Sekunden seit dem Start
der aktuellen Shell. Wenn SECONDS ein Wert zugewiesen wird,
erhöht sich dieser Wert jede Sekunde automatisch um eins.
- LINENO
- enthält die aktuelle Zeilennummer im Shellscript.
Wenn die Variable innerhalb einer Scriptfunktion aufgerufen wird,
entspricht die Zahl den bis zum Aufruf innerhalb der Funktion
ausgeführten einfachen Kommandos. Außerhalb von Shellscripten ist
diese Variable nicht sinnvoll belegt. Wenn die
LINENO-Shellvariable mit dem unset-Kommando gelöscht
wird, kann sie nicht wieder mit ihrer automatischen Funktion erzeugt
werden.
- HISTCMD
- enthält die Nummer des aktuellen Kommandos so,
wie sie in der History gespeichert wird.
- OPTARG
- enthält das Argument zu der zuletzt von
getopts ausgewerteten Option (-> Seite
).
- OPTIND
- enthält den Index der zuletzt von getopts
ausgewerteten Option (-> Seite
).
- OSTYPE
- enthält den Namen des Betriebssystems, also in
diesem Fall `Linux'.
- HOSTTYPE
- enthält eine Kennung zur Identifikation des
Rechnertyps. Für Linux kommen nur die Typen `i386' und `i486' in
Frage.
Ein Positionsparameter wird durch eine
positive ganze Zahl bezeichnet, also durch Ausdrücke wie $1,
$2 ... referenziert. Die Positionsparameter werden beim
Aufruf der Shell in der Kommandozeile oder
durch das set-Shellkommando (mit
den Optionen `-' oder `-' -> Seite
) gesetzt.
Wenn ein Positionsparameter mit mehr als einer Stelle (>9)
bezeichnet werden soll, muß er in geschweifte Klammern gesetzt werden:
z.B. ${12}.
Einige Parameter haben eine besondere Bedeutung. Diese Parameter
können nur gelesen werden. Eine Zuweisung an diese Parameter ist
verboten.
- *
- steht (als Parameter) für alle Positionsparameter von
1 an. In Anführungszeichen gesetzt, steht ''$*'' für
ein einziges Wort, bestehend aus dem Inhalt aller Positionsparameter
mit dem ersten IFS als Trennzeichen.
- @
- steht ebenfalls für alle Positionsparameter von 1 an.
In Anführungszeichen gesetzt, wird es aber durch die Werte der
einzelnen Positionsparameter (jeweils ein einzelnes Wort) ersetzt.
- #
- steht für die Anzahl der Positionsparameter.
- ?
- liefert den Rückgabewert (Status) des zuletzt
ausgeführten Kommandos.
- -
- steht für die Optionsflags (von
set oder aus der Kommandozeile).
- $
- steht für die Prozeßnummer der Shell.
- !
- steht für die Prozeßnummer des zuletzt im Hintergrund
aufgerufenen Kommandos.
- 0
- steht für den Namen des Shellscripts oder der Shell
selbst, wenn kein Shellscript ausgeführt wird.
- _
- (Unterstrich) steht für das letzte Argument des
zuletzt ausgeführten Kommandos (nach allen Erweiterungen).
Next: Erweiterung
Up: bash
Previous: Gruppen und Kontrollstrukturen: