Skript farbig formatieren und übersichtlich ausrichten

Linux-Skripte werden in der Regel dazu eingesetzt, um mit dem Anwender interaktiv in Verbindung zu treten. Informationen, Statusmeldungen oder abgearbeitete Aufgaben geben Rückmeldung darüber, an welcher Stelle sich das automatisierte Skript gerade befindet.  Diese Ausgaben erfolgen meistens mit dem Befehl echo, welches standardmäßig einfach nur unformatierten Text ausgibt.

Linux-Scripting: farbige Ausgabe mithilfe von ASCII-Code
Mit so genannten ASCII-Codes kann man die Ausgabe von echo
farbig gestalten und den Text ausrichten

Ruft man echo mit der Option -e auf, so können die bekannten ASCII-Codes verwendet werden, so dass die Ausgabe farblich gestaltet oder der Text ausgerichtet werden kann. Ein Blick in die Manpage von echo zeigt uns die wichtigsten Optionen:

-n     do not output the trailing newline
-e     enable interpretation of backslash escapes
-E     disable interpretation of backslash escapes (default)

Die Option -n verhindert, dass keine neue Zeile automatisch hinzugefügt wird. Das ist nützlich, wenn man die Ausgabe in einer Zeile verwirklichen möchte, aber im Quelltext des Linux-Scriptes der Übersicht halber mehrere Zeilen verwendet werden.

Das Beispiel

echo -n "Ich "
echo -n "heiße "
echo "Peter"

würde den Text

# Ich heiße Peter

ausgeben.

Farbige Ausgabe mit echo

Um mit echo eine farbige Ausgabe zu erreichen, muss man die Option -e verwenden. Der Code \033[1;36m definiert die Farbe und die Schriftanzeige, wobei \033 den ASCII-Code einleitet. 

Beispiel:

echo -e "\033[1;31m Das ist roter Text, der fett ist"

Der darauffolgende Code kann folgendermaßen interpretiert werden:

Die Zahl 1 steht für die Schriftanzeige. Mögliche Werte sind 0=normal, 1=fett, 4=unterstrichen, 5=blinkend, 7=invertiert.
Die Zahl 36 steht für die Schriftfarbe: Mögliche Werte sind 30=schwarz, 31=rot, 32=grün, 33=Gelb, 34=blau, 35=violett, 36=cyan, 37=weiß

Das m schließt die Schriftformatierung ab. Natürlich wird ab dieser Formatierungsangabe sämtlicher Text farbig dargestellt. Um nur einen bestimmten Bereich farbig zu markieren, setzt man die Standardformatierung \033[0 an das Ende des Textes:

echo -e "\033[1;31m Das ist roter Text, der fett ist\033[0"

Hier noch einmal die Farbtabelle in der Übersicht:

Linux ASCII-Code Farbtabelle
Mit so genannten ASCII-Codes kann man die Ausgabe von echo
farbig gestalten und den Text ausrichten

Ausgabe ordnen und ausrichten

Wer Text ausrichtet, der verwendet unter anderem Tabs, Backslash oder horizontale Tabs. Diese können auch in der Ausgabe von echo verwendet werden. Um beispielsweise einen Tab einzusetzen, verwendet man -e und \t:

echo -e "Gehalt:\t 2500 Euro"

Folgende Möglichkeiten zur Textausrichtung können nach diesem Prinzip verwendet werden:

\0NNN  the character whose ASCII code is NNN (octal)
\\ = backslash
\a = alert (BEL)
\b = backspace
\c = suppress trailing newline
\f = form feed
\n = new line
\r = carriage return
\t = horizontal tab
\v = vertical tab

Praxisbeispiel

Um diese Ausgabe zu erhalten...

Linux-Scripting: farbige Ausgabe mithilfe von ASCII-Code

... verwendet man dieses Linux-Skript:

echo -e "\033[1;36m Pruefe USB-Festplatte: \t \033[1;32m[$DEVICE_EXT angeschlossen]\033[0m"
echo -e "\033[1;36m Pruefe Mount-Verzeichnis: \t \033[1;32m[$MOUNT_VRZ ist frei]\033[0m"
echo -ne "\033[1;36m Mounte die USB-Festplatte: \t \033[0m"
echo -e "\033[1;32m[OK]\033[0m"
echo -e "Das hat ja schon einmal super geklappt"
echo -e "Schau Dir nun die Festplatten-Belegung an"
echo " "
echo -e "\033[1;36m Diese Daten sollen kopiert werden \033[0m"
echo -e "\033[1;36m ================================= \033[0m"
ls -1 -sh $BACKUP_VRZ/monats*
ls -1 -sh $BACKUP_VRZ/benary*
ls -1 -sh $BACKUP_VRZ/lpr*
echo " "
echo -e "\033[1;36m Freier Speicher auf der USB-HDD \033[0m"
echo -e "\033[1;36m =============================== \033[0m"