next up previous contents index
Next: Erweiterung Up: bash Previous: Gruppen und Kontrollstrukturen:

Parameter

   

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.

Shell- und Umgebungsvariable

     Shellvariable haben auch in der interaktiven Shell eine große Bedeutung.

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 gif).  

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 gif).   

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 gif) 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 gif). Voreinstellung ist ` #?'.

PS4
wird zur Anzeige der erweiterten Kommandos mit der Option ` -x' benutzt (-> set, Seite gif). 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 gif).

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 gif).

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 gif).
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 gif).
OPTIND
enthält den Index der zuletzt von getopts ausgewerteten Option (-> Seite gif).
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.

 

Positionsparameter

    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 gif) gesetzt.

Wenn ein Positionsparameter mit mehr als einer Stelle (>9) bezeichnet werden soll, muß er in geschweifte Klammern gesetzt werden: z.B. ${12}.

Spezialparameter

    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 up previous contents index
Next: Erweiterung Up: bash Previous: Gruppen und Kontrollstrukturen:



Linux Anwenderhandbuch -- Copyright 1993, 1994, 1995 S. Hetze, D. Hohndel, O. Kirch, M. Müller