Variable=$(cat Datei)
Der Dreizeiler aus Listing 7 demonstriert das Einlesen der Datei merker.txt – sie enthält nur die Zeichenkette INFORMATION. Möchten Sie Wörter oder Zeilen einzeln auswerten, nutzen Sie dazu eine Schleife, was in diesem Fall aber nicht geschieht.
Listing 7
#!/bin/sh A=$(cat merker.txt) echo $A
Den Wert einer Variablen löschen Sie entweder mit dem Befehl unset Variable, oder indem Sie die Variable in der Form Variable="" belegen. Beachten Sie, dass Sie in beiden Fällen die Variable ohne das Dollar-Zeichen ansprechen – in der Praxis ein häufiger Fehler.
Ausgabe
Mit dem Kommando echo geben Sie Daten an verschiedene Ziele aus: Bildschirm, Dateien (durch Umlenken der Ausgabe) oder in einer sogenannten Pipe an nachfolgende Befehle. Dabei besteht die Möglichkeit, wie in echo "Name: $name" feste Werte und Variablen zu kombinieren. Wollen Sie gleichzeitig den Namen der Variablen und dessen Wert ausgeben, nutzen Sie einen der Befehle aus Listing 8.
Listing 8
echo "\$Variable = $Variable" echo '$Variable =' $Variable
Mit der Option -e interpretiert die Shell Steuerzeichen in der Ausgabe, mit -E unterbinden Sie dieses Verhalten. Die Option -n unterdrückt den Zeilenumbruch nach der Ausgabe. Das benötigen Sie beispielsweise, wenn die verwendete Shell die Anzeige eines Prompts bei read nicht unterstützt. Dann verwenden Sie die folgende Kombination:
echo -n "Eingabe: "; read Variable
Mit Steuerzeichen erweitern Sie die Ausgabe auf Terminal oder einer umgelenkten Ausgabe: Auf diese Weise fügen Sie Tabulatoren oder Zeilenvorschübe ein oder unterdrücken diese. Listing 9 zeigt, wie Sie diese Zeichen einsetzen, in Abbildung 1 sehen Sie das Ergebnis. Die Tabelle “Steuerzeichen” führt die möglichen Steuerzeichen auf und erläutert deren Funktion.
Listing 9
#!/bin/bash echo -e "Tabulator: abc\tdef" echo -e "Vertikaler Tabulator: abc\vdef" echo -e "Neue Zeile: abc\ndef" # Neue Zeile unterdrücken (wie -n) echo -e "Name eingeben: \c"; read NAME; echo $NAME
Steuerzeichen
|
Zeichen |
Aktion |
|---|---|
|
|
Backslash ausgeben |
|
|
Alarm, Piepser am Terminal |
|
|
Rücktaste |
|
|
Neue Zeile unterdrücken |
|
|
Seitenvorschub |
|
|
Neue Zeile |
|
|
Wagenrücklauf |
|
|
Tabulator horizontal |
|
|
Tabulator vertikal |
Es besteht die Möglichkeit, die Ausgabe mit Farbe und diversen Attributen zu versehen, sofern das Terminal das unterstützt. So heben Sie wichtige Meldungen hervor oder gestalten Menüs ansprechender. Das Zusammenstellen der dazu genutzten sogenannten Escape-Sequenzen gestaltet sich dabei etwas kryptisch. Die Tabelle “Farben und Attribute” vermittelt einen Überblick der Möglichkeiten.
Farben und Attribute
|
Zeichen |
|
|---|---|
|
|
ohne Effekte |
|
|
fett |
|
|
unterstrichen (abhängig vom Terminal) |
|
|
blinken (abhängig vom Terminal) |
|
|
Vorder/Hintergrund tauschen (invertieren) |
|
|
fett zurücksetzen |
|
|
unterstrichen zurücksetzen |
|
|
blinken zurücksetzen |
|
|
invers zurücksetzen |
|
|
ANSI-Vordergrund-Farbe setzen |
|
|
ANSI-Hintergrund-Farbe setzen |
|
Bereiche |
|
|
|
Vordergrund |
|
|
Hintergrund |
|
Farben |
|
|
|
Schwarz |
|
|
Rot |
|
|
Grün |
|
|
Braun |
|
|
Blau |
|
|
Magenta |
|
|
Cyan |
|
|
Hellgrau |
|
|
auf Normalfarbe zurücksetzen |
Sie leiten die Angaben mit einem ESC-Zeichen ein (\033) gefolgt von [. Nun folgen die gewünschten Effekte und Farben, jeweils getrennt durch ein Semikolon. Der Buchstabe m schließt die Sequenz ab. So sorgt beispielsweise folgender Befehl im Terminal für blaue Schrift:
$ echo -e "\033[0;34m"
Dabei leitet \033 die Sequenz mit dem ESC-Zeichen ein. Die Null vor dem Semikolon zeigt an, dass Sie keine Effekte wünschen. Nach dem Semikolon steht die 3 für den Vordergrund, also die Schriftfarbe, wobei diese blau erscheint (4). Mit reset setzen Sie das Terminal wieder zurück.
Listing 10 erzeugt eine kleine Maske zur Eingabe von Daten: Die Überschrift erscheint dabei unterstrichen, die Feldnamen blau, die Eingaben fett und in Schwarz, anschließend zeigt das Skript diese invers und setzt danach die Einstellungen zurück (Abbildung 2).
Listing 10
#!/bin/bash echo "" echo -e "\033[4;31mDateneingabe" echo -e "\033[24;34m" echo -e "Vorname: \t\033[1;39m\c"; read VN echo -e "\033[22;m\033[24;34mNachname: \t\033[1;39m\c"; read NN echo -e "\033[1;7m$VN $NN" echo -e "\033[0;27m"





