Shell-Skripte selbst schreiben (Teil 1)

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
Abbildung 2: Jetzt wird es bunt (Listing 10).

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

0

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

0

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"
Abbildung 2: Jetzt wird es bunt (Listing 10).

Ausgabe mit Printf

Der Befehl Printf erlaubt weitgehende Anweisungen zum Formatieren der Ausgabe. Sie erzeugen auf diese Weise etwa tabellarische Datenausgaben, deren Spalten korrekt übereinanderstehen. Im Gegensatz zu Echo unterscheidet Printf verschiedene Datentypen. Dabei steht %s für eine Zeichenkette, %c für ein einzelnes Zeichen, %d für eine Ganzzahl und %f für eine Fließkommazahl.

Mit der Option -v Variable weisen Sie das formatierte Ergebnis als Wert direkt einer Variablen zu.

TIPP

Enthält eine Variable eine Zeichenkette mit Leerzeichen, müssen Sie sie beim Einsatz mit dem Operator %s in Anführungszeichen stellen.

Es gibt noch weitere Anweisungen. Für die Ausgabe von Fließkommazahlen benötigen Sie zwei Angaben: die gesamte Länge der Ausgabe, also inklusive dem Komma und den Nachkommastellen sowie die Zahl der Nachkommastellen selbst. Das Minuszeichen sorgt für eine linksbündige Ausgabe. man 3 printf gibt Aufschluss über die Operatoren zum Formatieren.

Im Listing 11 finden Sie die meisten für den Alltag notwendigen Anweisungen (Abbildung 3). So formatiert Zeile 8 den Text so, das der Gesamtplatz 8 Stellen einnimmt und die Zeichenkette 3 Stellen, die rechtsbündig ausgerichtet ist. Das Beispiel der folgenden Zeile ist vom Platz gleich gestaltet, aber linksbündig ausgerichtet.

Listing 11

 

#! /bin/bash
TEXT="Mustertext"
NR1=12,345
NR2=-3,4
NR3=-45
printf "Beispiel 1 (Text): %8.3s \n" $TEXT
printf "Beispiel 2 (Text): %-8.3s \n" $TEXT
printf "Beispiel 3 (Text): %-15s \n" $TEXT
printf "Beispiel 4 (Text): %15s \n" $TEXT
printf "Beispiel 5 (Zahl 1): %10.2f \n" $NR1
printf "Beispiel 6 (Zahl 2): %10.2f \n" $NR2
printf "Beispiel 7 (Zahl 3): %d \n" $NR3
printf "Beispiel 8 (Zahl 3): %.5d \n" $NR3
printf -v f "%.3s \n" $TEXT
echo -e "Beispiel 9: Wert der Variablen \$F: $F"
printf "Text: %-.3s  Zahl1: %.2f  Zahl2: %.2f\n\n" $TEXT $NR1 $NR2
Abbildung 3: Gebräuchliche Formatierungen mit Printf (Listing 11).

In den Beispielen 1 bis 4 nimmt der Text einen Platz von 8 beziehungsweise 15 Stellen ein, jeweils linksbündig und rechtsbündig formatiert. Die folgenden Zeilen zeigen Beispiele für Fließkommazahlen mit zehnstelliger Breite mit zwei Stellen nach dem Komma sowie dem Pendant mit negativen Werten.

Die Beispiele 7 und 8 zeigen die Ausgabe einer ganzen, negativen Zahl – einmal ohne besondere Formatierungen, einmal mit 5 Stellen Platz. Die vorletzten Zeilen demonstrieren das Zuweisen einer Variablen. In der letzten Zeile sehen Sie die gleichzeitige Ausgabe mehrerer Werte. Dabei ist es wichtig, die Anweisungen und Variablen in der gleichen Reihenfolge zu platzieren.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 8 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

04/2019
TV & Multimedia

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Finger weg

    Ein Temperatursensor verrät, ob Sie einen Gegenstand gefahrlos berühren dürfen. Beim Messen brauchen Sie dabei noch nicht einmal Kontakt zum Objekt.

  • Aus einer Hand

    Um einen Mikrocontroller zu programmieren, genügt ein Raspberry Pi. Wir zeigen, was Sie dazu noch benötigen.

  • Im Gleichtakt

    Synchronisierte Live-Loops und selbst erstellte Funktionen helfen dabei, Sonic Pi wie ein Live-Instrument zu spielen.

  • Mach mal

    Das Ftduino-Modul schlägt die Brücke zu Fischertechnik und ermöglicht es unter anderem, einen Drei-Achsen-Roboter anzusteuern.

  • Eleganter Diener

    Jeden Morgen dieselben Handgriffe, um zu sehen, ob die S-Bahn fährt und wie das Wetter wird? Ein cleverer Infoscreen auf RasPi-Basis automatisiert den Vorgang.

  • Bienenflüsterer

    Bienenzüchter, die ihre Völker besser kennenlernen möchten, müssen die fleißigen Insekten nicht pausenlos stören. Mit einem Raspberry Pi und verschiedenen Sensoren überwachen sie Temperatur, Luftfeuchtigkeit und bald auch das Gewicht des Bienenstocks.

  • Beerige Musik

    Für echten Hi-Fi-Sound braucht es mehr als einen kleinen Bluetooth-Brüllwürfel. Mit Volumio und einem Raspberry Pi rüsten Sie Ihre klassische Hi-Fi-Anlage mit smarten Funktionen auf.

  • Ton ab!

    Auf den ersten Blick erscheint der RasPi zu schwachbrüstig für den Betrieb leistungshungriger DAW-Software. Doch der Schein trügt.

  • Himbeer-TV

    Der DVB TV µHAT rüstet den Raspberry Pi mit einem DVB-T/T2-Tuner auf. Die deutsche TV-Landschaft schränkt dessen Möglichkeiten allerdings ein.

  • Git à la RasPi

    Mit wenigen Handgriffen zum Git-Hoster: Die dezentrale Arbeitsweise von Git erleichtert in Kombination mit der Netzwerkfähigkeit des RasPi das Verwalten von Quellcode.