Umgebungsvariablen gab es schon bei MS-DOS, allerdings in einem sehr eineschränkten Maße. Zudem durften alle Variablen zusammen nicht länger als 255 Bytes sein, dieses Limit existiert bei Unix natürlich nicht. Hier werden eine Vielzahl unterschiedlicher Variablen verwendet.
Wie unter Unix üblich wird auch hier zwischen Groß- und Kleinschreibung unterschieden. In einer Bourne Shell werden allgemeine Variablen normalerweise groß geschrieben, in einer C-Shell hingegen klein.
Die Liste der gesetzten Variablen kann man sich bei beiden mit dem Befehl "set" anzeigen lassen.
In Skripten werden auf diese Weise Informationen zwischen einzelnen Modulen ausgetauscht. In einer Netzwerkumgebung mit unterschiedlichen Architekturen (i386, sparc, alpha etc.) kann über eine deartige Variable das jeweils passende Binärprogramm gefunden werden, z.B. über "~/bin/$HOSTTYPE/mein.programm".
Je nach Shell werden sie unterschiedlich gesetzt. In einer C-Shell ist dazu der interne Befehl "setenv" vorgesehen. (z.B. "setenv LINES 44") In einer Bourne Shell hingegen geschieht die Zuweisung einfach mit "COLUMNS=132".
Wenn diese Variablen vom User verändert werden, kann es zu seltsamen Auswirkungen kommen. Sie sollten daher nur von erfahrenen Benutzern manipuliert werden.
| HOME | Enthält den Pfad zum Heimatverzeichnis des Users. |
| HOSTNAME | Der aktuelle Rechnername. |
| HOSTTYPE | Die verwendete Rechnerarchitektur, meist i386, bei anderen Architekturen wie z.B. beim Amiga enthält sie die Zeichenkette m68k. |
| IFS | Das intern verwendete Zeichen, um Felder von einander zu trennen, z.B. bei Argumenten an ein Programm oder bei der Weiterverarbeitung in einer Shell-Funktion. Der Wert kann geändert werden, um Shellskripte flexibel zu gestalten. |
| LOGNAME | Der Loginname des Users. |
| MACHTYPE | Der Maschinentyp, er enthält meistens zusätzlich den Namen des Betriebssystems sowie der Distribution. Übliche Werte sind i586-debian-linux oder i386-unknown-linux. |
| Enthält den Pfad zur Mailbox, damit die Shell die Meldung "You have new mail!" ausgeben kann. Einige Mailprogramme benutzen sie ebenfalls zur Lokalisierung der Mailbox. | |
| RANDOM | Liefert eine Pseudo-Zufallszahl. Wird dieser Variablen eine Zahl zugewiesen, so wird damit der Zufallszahlengenerator initialisiert. |
| UID | Die User-ID des aktuellen Benutzers oder Skriptes. |
| EDITOR | Viele Programme, die irgendwann einen Editor aufrufen, schauen zuerst in dieser Variablen nach bevor sie den Default-Editor, nämlich den vi, starten. |
| CDPATH | Analog zu PATH wird diese Liste vom "cd"-Befehl benutzt, um nach Verzeichnissen zu suchen, wenn das, in das der Benutzer wechseln möchte, kein Unterverzeichnis des aktuellen ist. |
| COLUMNS | Enthält die Anzahl der Spalten auf dem Bildschirm bzw. Terminal. |
| DISPLAY | Wird mit dem X Window System gearbeitet, dann beinhaltet diese Variable den Namen des Ausgabebildschirms, z.B. "kuolema:0.0". |
| LINES | Enthält die Anzahl der Zeilen auf dem Bildschirm bzw. Terminal. |
| PATH | Eine mit Doppelpunkten getrennte Liste, in denen nach Programmen gesucht wird, wenn kein Pfad vorangestellt wird (Tippe "ls" und die Shell findet es als "/bin/ls". |
| PS1 | Enthält die Beschreibung des normalen Promptes, PS2 den des zweiten, ... PS4 den des vierten. In der "tcsh" heißt diese Variable einfach "prompt". |
| TERM | Entspricht der Terminalemulation aus der termcap- bzw. terminfo-Datenbank (auf der Console ist das "linux", in einem XTerm "xterm") |
Um in einer Netzwerkumgebung einen informativen Prompt zu haben, bieten sich bei der bash folgende Zuweisungen an:
PS1=\h!\u(`tty|cut -d/-f 3`):\w> PS2=\#> |
finlandia!joey(ttyS1):~/Mail> |
| $$ | Wird zur aktuellen Prozeß-ID erweitert und kann daher für eindeutige temporäre Dateinamen verwendet werden. |
| $# | Enthält die Anzahl der Kommandozeilenparameter, mit denen das Skript oder Funktion aufgerufen wurde. |
| $0 | Enthält den Namen des aufgerufenen Skriptes. |
| $1 | Der erste Parameter des Skriptes, $9 enthält den letzten. |
| $9 | Wenn das Skript mit mehr als 9 Argumenten aufgerufen wurde, kann die Liste der Variablen mit dem Befehl "shift" um eine Stelle nach rechts verschoben werden, sodaß $1 rausfällt und $2 zu $1 wird. Die Abbildung verdeutlicht das. |
| $* | Enthält alle Parameter aneinandergekettet, durch $IFS |
| $@ | getrennt, "$@" expandiert jedoch nicht zu einer einzigen Zeichenkette, sondern zu einer Liste von Zeichenketten. |
| $? | Diese Variable enthält den Rückgabewert des zuletzt ausgeführten Befehls. |
| $! | Die Prozeßnummer des zuletzt ausgeführten Befehls, der mit & aufgerufen wurde und daher im Hintergrund abgearbeitet wird. |
| $_ | Enthält das letzte Argument des zuletzt ausgeführten Befehls. |
Beispiel:
unterprogramm_aufruf
if [ $? -ne 0 ]; then
echo "Es ist ein Fehler aufgetreten."
fi
|