Shell: Variablen
Variablen kann man sich als Behälter mit Namen vorstellen, in denen etwas für die spätere Verwendung aufbewahrt werden kann.
Stell dir eine Tasse vor.
Auf dem Bild hat die Variable den Namen Alter und den Inhalt 17.
Shell: Variable-Expansion
In einem shell-script und auf der Kommandozeile muss die
Programmiererin oder der Benutzer eindeutig mitteilen können,
was er möchte, wenn ein Variablenname getippt wird:
Wir verwenden zur Demonstration das Kommando echo
.
Es gibt drei Möglichkeiten:
-
Der Inhalt der Variable soll ausgegeben werden. Das geht direkt mit
$ echo $Alter
$ echo "$Alter"
Es handelt sich hier um doppelte Anführungszeichen, sogenannte rabbit-ears oder double-quotes. Variablen, die in double-quotes vorkommen, werden durch ihren Inhalt ersetzt, bevor die Verarbeitung weitergeht.
-
Der Text $Alter soll ausgeben werden. Das geht mit
$ echo '$Alter'
Es handelt sich hier um einfache Anführungszeichen, sogenannte ticks oder single-quotes. Variablen, die in single-quotes vorkommen, werden nicht ersetzt. Die Zeichenkette wird unverändert verwendet.
-
Die Ausgabe eines Kommandos soll auf der Kommandozeile erscheinen. Das geht mit sogenannten back-ticks oder back-quotes:
$ echo `ls /bin`
Hier wird das Kommando
ls /bin
zuerst ausgeführt, und dessen Ausgabe ersetzt dann die Zeichenkettels /bin
auf der Kommandozeile, die erst nach der Ersetzung ausgeführt wird.
Zusammenfassung Variable-Expansion:
Wenn man Variablennamen verwendet, kann man entweder den Namen meinen, oder den Ihnalt. Um das präzise auszudrücken, nimmt man auf der Kommanozeile oder in shell-skripts die entsprechenden ticks.
Ein-Ausgabe Umleitung
Die Ein- und Ausgabekanäle können unter Unix/Linux umgeleitet werden:
Ausgabeumleitung
Das grösser-als Zeichen bzw. die schliessende spitze Klammer (>) deutet an, dass der Standardausgabe-Kanal eines Programms mit einer Datei verbunden werden soll.
Beispielsweise soll die Ausgabe des Kommandos ls -l /bin
in die Datei programmdateien
umgeleitet werden:
$ ls -l /bin > programmdateien
$ ls -l /bin >> programmdateien
Dieser Befehl bewirkt, dass der Standardausgabekanal für das Kommando
ls -l /bin
mit der Datei programmdateien
verbunden wird.
Wenn zwei grösser-als Zeichen hintereinder stehen bedeutet das, dass die Standardausgabe an die Datei angehängt werden soll.
Das Kommando gibt nichts am Terminal aus. Nach der Ausführung
gibt es aber die Datei programmdateien
im aktuellen Directory.
Jetzt kann man mit der Datei weiter arbeiten.
Eingabeumleitung
Das kleiner-als Zeichen bzw. die öffnende spitze Klammer (<) deutet an, dass der Inhalt einer Datei an ein Programm weitergegeben werden soll.
Beispielsweise soll der Inhalt der Datei foo
an das Programm cat
gegeben werden:
$ cat < foo
Dieser Befehl bewirkt, dass der Standardeingabekanal für das Kommando
cat
mit der Datei foo
verbunden wird.
Die Unix-Pipe
Mit dem Pipe-Symbol (|) kann man die Standardausgabe eines Programms
mit der Standardeingabe eines anderen Programms verbinden.
Auf diese Weise kann man mehrere Programme hintereinander laufen lassen,
die jeweils die Ausgabe ihres Vorgängers in der Kette verändern.
In den meisten Fällen werden Informationen hier verdichtet oder gefiltert.
Etwa so:
$ programmliste > sort -u | wc -l
diese Datei (
programmliste
)
wird von
sort -u
sortiert, und Doppeleinträge werden entfernt, dann
mit dem pipe-Symbol (|) zum nächsten Programm
wc -l
weiter geleitet, was die Zeilen der Eingabe zählt.
Als Ergebnis bekommt man nur die Anzahl der verschiedenen Zeilen in der
ursprünglichen Datei programmliste
.