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.

Tasse als Variable, Name=Alter, Inhalt=17

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:

  1. 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.

  2. 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.

  3. 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 Zeichenkette ls /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 

Startdatei diese Datei (programmliste)

programm1 wird von sort -u sortiert, und Doppeleinträge werden entfernt, dann

pipe mit dem pipe-Symbol (|) zum nächsten Programm

programm2 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.