Aus Raspberry Pi Geek 04/2017

Shell-Skripte selbst schreiben (Teil 1) (Seite 3)

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

\a

Alarm, Piepser am Terminal

\b

Rücktaste

\c

Neue Zeile unterdrücken

\f

Seitenvorschub

\n

Neue Zeile

\r

Wagenrücklauf

\t

Tabulator horizontal

\v

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

1

fett

4

unterstrichen (abhängig vom Terminal)

5

blinken (abhängig vom Terminal)

7

Vorder/Hintergrund tauschen (invertieren)

22

fett zurücksetzen

24

unterstrichen zurücksetzen

25

blinken zurücksetzen

27

invers zurücksetzen

3T

ANSI-Vordergrund-Farbe setzen

4T

ANSI-Hintergrund-Farbe setzen

Bereiche

3

Vordergrund

4

Hintergrund

Farben

 

Schwarz

1

Rot

2

Grün

3

Braun

4

Blau

5

Magenta

6

Cyan

7

Hellgrau

9

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"
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 8 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben