[Zurück] [Home] [Weiter]       http://rowa.giso.de  

Eine frei verwendbare Unix-Grundlagenschulung mit muLinux

Shell-Variablen

Was ist eine Shell?

Shell ist der Kommandointerpreter unter Unix. Das klingt erst mal kompliziert. Wir haben aber schon die ganze Zeit mit der Shell gearbeitet. Wir haben Befehle, wie z. B. ls oder date, eingegeben und uns an den Reaktionen von Unix erfreut. Dieser Dialog wird durch den Kommandointerpreter realisiert. Dieser liegt wie eine Schale (engl. Shell) über dem Betriebsystem und sorgt für die Kommunikation mit dem Nutzer.

Genaugenommen gibt es unter Unix mehrere Shells (C, Korn, Bash, ...). Jeder Nutzer kann sich für seine Lieblingsshell entscheiden. muLinux verwendet aber nur eine Shell. Die Unterschiede der Shells sind (für normale Nutzer) gering und sollten uns daher vorerst nicht interessieren.

Was ist eine Variable?

Eine Variable ist lediglich ein Name, dem ein Wert zugewiesen wurde. Es gibt drei Variablentypen:

Systemvariablen bestimmen die Eigenschaften des System dem Nutzer gegenüber und können vom Nutzer angepaßt werden. Systemvariablen werden mit Großbuchstaben geschrieben.

Auf die speziellen Variablen kann nur lesend zugegriffen werden. Sie bestimmen allgemeine Systemeigenschaften.

Benutzerdefinierte Variablen können vom Nutzer erzeugt, geändert und gelöscht werden. Sie können z. B. für Shell-Skripte eingesetzt werden. Das sind kleine Programme, die sich wiederholende Arbeiten vereinfachen können.

Anzeigen vorhandener Variablen

Zur Anzeige aller Variablen dient der Befehl set.

/# set

Es werden die Systemvariablen mit Inhalt angezeigt. Links stehen die Variablennamen, dann kommt ein Gleichheitszeichen und danach der Inhalt der Variablen. Um alle Variablen zu sehen, müssen wir den Bildschirminhalt scrollen ([Shift] [Bild auf], [Shift] [Bild ab]). Dafür sind es doch sehr viele, wie uns folgender Befehl anzeigt:

/# set | wc

Wir wollen hier nur einige Systemvariablen besprechen. Zu Beginn schauen wir uns mal die Systemvariable PS1 an. Wer den Bildschirm nicht scrollen will, kann mit grep nur die Zeile mit PS1 anzeigen lassen:

/# set | grep "PS1"
PS1=/#
/# _

Die Variable PS1 beinhaltet also die zwei Zeichen /#. Was ist das? Das kommt uns doch irgendwie bekannt vor. Ja, das ist unser Prompt! Mal sehen ob wir diesen ändern können.

Zuweisen eines Inhaltes

Eine Variable wird mit folgender Syntax definiert, wobei keine Leerzeichen vor oder nach dem Gleichheitszeichen stehen dürfen:

Variable=Wert

Wir wollen den Prompt so ändern, daß "Befehl?" als Prompt erscheint:

/# PS1=Befehl?
Befehl?_

Schöner wäre es aber mit einem Leerzeichen nach "Befehl?". Wenn wir Leerzeichen haben wollen, müssen wir den Wert in Anführungsstrichen einschließen:

/# PS1="Befehl? "
Befehl? _

Dies ist auch notwendig, wenn wir mehrere Wörter als Wert zuweisen wollen:

/# PS1="Gebe bitte einen Befehl ein: "
Gebe bitte einen Befehl ein: _

Wer will kann auch einen DOS-Prompt mit PS1="C:\> " vorgaukeln.

Anzeigen einer Variablen

Zum Anzeigen einer Variablen kann der Befehl echo verwendet werden. echo gibt Text aus. Dieser Befehl ist notwendig bei Shell-Skripten.

Gebe bitte einen Befehl ein: echo PS1
PS1
Gebe bitte einen Befehl ein: _

So wird leider nur der Text "PS1" angezeigt und nicht der Inhalt von PS1. Dazu muß Dollarzeichen $ vor der Variablen stehen:

Gebe bitte einen Befehl ein: echo $PS1
Gebe bitte einen Befehl ein:
Gebe bitte einen Befehl ein: _

Wir können auch Text und Variablen mischen:

Gebe bitte einen Befehl ein: echo "Das ist der Inhalt von PS1: $PS1"
Das ist der Inhalt von PS1: Gebe bitte einen Befehl ein:
Gebe bitte einen Befehl ein: _

Leeren von Variablen

Um eine Variable zu leeren, gibt man den Variablennamen nur gefolgt von einem Gleichheitszeichen ein:

/# PS1=
_

Die Variable bleibt dabei aber bestehen. Sie ist nur leer.

/# set | grep "PS1"
PS1=
/# _

Wenn wir PS1 leeren, haben wir kein Prompt mehr. Was passiert eigentlich beim Wechseln in ein anderes Verzeichnis?

cd /home
/home# _

Die Variable PS1 wird hier also vom System überschrieben.

Schreibschutz für Variablen

Mit dem Befehl readonly (engl. nur lesen) können Variablen gegen eine mögliche Änderung geschützt werden.

/# readonly PS1

Jeder Versuch PS1 zu ändern, wird mit einer Fehlermeldung quittiert. Der Schreibschutz bleibt bis zum Verlassen der Shell erhalten. Ruft man den Befehl readonly ohne Parameter auf, werden alle schreibgeschützten Variablen angezeigt.

/# readonly
PS1

Benutzerdefinierte Variablen

Um eigene Variablen zu definieren, muß bei der Benennung folgendes beachtet werden:

Variablen können zur Vereinfachung bzw. bei Wiederholung von Befehlen eingesetzt werden. So zum Beispiel als Befehlsoption:

/# a=/usr/bin
/# cd $a
/usr/bin# _

Oder als Befehl:

/# b="ls -l"
/# $b
Lange Ausgabe de Verzeichnisinhaltes

Wir können auch die Ausgaben von Programmen in eine Variable speichern. Dazu müssen wir den Programmaufruf in zwei rückwertige Hochkomma (franz. Accent grave) ` einklammern.

/# heute="Heute ist `date`"
/# echo $heute
Heute ist Tue Nov 16 15:54:16 1999
/# _

Erweitern des Variableninhaltes

/# toll=abend
/# toll=Feier$toll
/# echo $toll
Feierabend
/# _

Löschen von Variablen

Zum Löschen einer Variable dient der Befehl unset:

/# unset a
/# _
[Zurück] [Home] [Weiter]