Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 5 Terminal-Ein- und Ausgabe
  gp 5.1 Von Terminals zu Pseudo-Terminals
  gp 5.2 Ausgabe
    gp 5.2.1 Der echo-Befehl
    gp 5.2.2 print (Korn-Shell only)
    gp 5.2.3 Der Befehl printf
    gp 5.2.4 Der Befehl tput – Terminalsteuerung
  gp 5.3 Eingabe
    gp 5.3.1 Der Befehl read
    gp 5.3.2 (Zeilenweise) Lesen einer Datei mit read
    gp 5.3.3 Zeilenweise mit einer Pipe aus einem Kommando lesen (read)
    gp 5.3.4 Here-Dokumente (Inline-Eingabeumleitung)
    gp 5.3.5 Here-Dokumente mit read verwenden
    gp 5.3.6 Die Variable IFS
    gp 5.3.7 Arrays einlesen mit read (Bash und Korn-Shell only)
    gp 5.3.8 Shell-abhängige Anmerkungen zu read
    gp 5.3.9 Einzelnes Zeichen abfragen
    gp 5.3.10 Einzelne Zeichen mit Escape-Sequenzen abfragen
    gp 5.3.11 Passworteingabe
  gp 5.4 Umlenken mit dem Befehl exec
  gp 5.5 Filedeskriptoren
    gp 5.5.1 Einen neuen Filedeskriptor verwenden
    gp 5.5.2 Die Umlenkung <>
  gp 5.6 Named Pipes
  gp 5.7 Menüs mit select (Bash und Korn-Shell only)
  gp 5.8 dialog und Xdialog
    gp 5.8.1 Entscheidungsfrage --yesno
    gp 5.8.2 Nachrichtenbox mit Bestätigung --msgbox
    gp 5.8.3 Hinweisfenster ohne Bestätigung --infobox
    gp 5.8.4 Text-Eingabezeile --inputbox
    gp 5.8.5 Ein einfacher Dateibetrachter --textbox
    gp 5.8.6 Ein Menü --menu
    gp 5.8.7 Auswahlliste zum Ankreuzen --checklist
    gp 5.8.8 Radiobuttons zum Auswählen --radiolist
    gp 5.8.9 Fortschrittszustand anzeigen --gauge
    gp 5.8.10 Verändern von Aussehen und Ausgabe
    gp 5.8.11 Kleines Beispiel
    gp 5.8.12 Zusammenfassung
  gp 5.9 gnuplot – Visualisierung von Messdaten
    gp 5.9.1 Wozu wird gnuplot eingesetzt?
    gp 5.9.2 gnuplot starten
    gp 5.9.3 Das Kommando zum Plotten
    gp 5.9.4 Variablen und Parameter für gnuplot
    gp 5.9.5 Ausgabe von gnuplot umleiten
    gp 5.9.6 Variablen und eigene Funktionen definieren
    gp 5.9.7 Interpretation von Daten aus einer Datei
    gp 5.9.8 Alles bitte nochmals zeichnen (oder besser speichern und laden)
    gp 5.9.9 gnuplot aus einem Shellscript heraus starten (der Batch-Betrieb)
    gp 5.9.10 Plot-Styles und andere Ausgaben festlegen
    gp 5.9.11 Tricks für die Achsen
    gp 5.9.12 Die dritte Dimension
    gp 5.9.13 Zusammenfassung


Rheinwerk Computing

5.2 Ausgabdowntop

Auf den folgenden Seiten soll etwas umfangreicher auf die Ausgabe-Funktionen eingegangen werden, von denen Sie bei Ihren Scripts noch regen Gebrauch machen werden.


Rheinwerk Computing

5.2.1 Der echo-Befehl  downtop

Den echo-Befehl haben Sie bisher sehr häufig eingesetzt, und im Prinzip gibt es auch gar nicht mehr allzu viel dazu zu sagen. Und dennoch ist der echo-Befehl unter den unterschiedlichen Shells inkompatibel. Die Syntax zu echo:

echo [-option] argument1 argument2 ... argument_n

Die Argumente, die Sie echo übergeben, müssen mindestens mit einem Leerzeichen getrennt werden. Bei der Ausgabe auf dem Bildschirm verwendet echo dann ebenfalls ein Leerzeichen als Trennung zwischen den Argumenten. Abgeschlossen wird eine Ausgabe von echo mit einem Newline-Zeichen. Wollen Sie das Newline-Zeichen ignorieren, können Sie die Option –n zum Unterdrücken verwenden:

# Demonstriert den echo-Befehl
# aecho1
echo -n "Hier wird das Newline-Zeichen unterdrückt"
echo ":TEST"

Das Script bei der Ausführung:

you@host > ./aecho1
Hier wird das Newline-Zeichen unterdrückt:TEST

Soweit ist dies in Ordnung, nur dass eben die »echte« Bourne-Shell überhaupt keine Optionen für echo kennt. Dies stellt aber kein Problem dar, denn Sie können hierfür die Escape-Sequenz \c verwenden. \c unterdrückt ebenfalls das abschließende Newline-Zeichen. Hier dasselbe Script nochmals:

# Demonstriert den echo-Befehl
# aecho2
echo "Hier wird das Newline-Zeichen unterdrückt\c"
echo ":TEST"

In der Bourne- und Korn-Shell scheint die Welt jetzt in Ordnung zu sein, nur die Bash gibt hier Folgendes aus:

you@host > ./aecho2
Hier wird das Newline-Zeichen unterdrückt\c
:TEST

Die Bash scheint die Escape-Sequenz nicht zu verstehen. Damit dies trotzdem funktioniert, müssen Sie die Option –e verwenden:

# Demonstriert den echo-Befehl
# aecho3
echo -e "Hier wird das Newline-Zeichen unterdrückt\c"
echo ":TEST"

Leider stehen Sie allerdings dann wieder vor dem Problem, dass die »echte« Bourne-Shell (also nicht der symbolische Link nach Bash!) keine Optionen kennt. Es ist also nicht möglich, auf diesem Weg ein portables echo für alle Shells zu verwenden. Folgende Regeln müssen Sie beachten:

gp  Die Bourne-Shell kennt keine Optionen wie -e oder -n, versteht aber ohne Probleme die Escape-Sequenzen.
gp  Die Korn-Shell kennt die Optionen -e und -n und versteht auch die Escape-Sequenzen. Beachten Sie aber, dass nur neuere Versionen der Korn-Shell die Optionen -e und -n kennen.
gp  Die Bash kenn die Optionen -e und -n, versteht aber die Escape-Sequenzen nur dann, wenn echo mit der Option -e verwendet wird.

Steuerzeichen und Escape-Sequenzen

Sie kennen den Vorgang, dass auf Druck einer Taste hin das Zeichen an der Position des Cursors bzw. »Prompts« ausgegeben wird. Das Terminal bzw. die Terminal-Emulation setzt den Cursor dann automatisch um eine Position weiter. Anders verhält sich das Ganze aber bspw. bei einem Zeilenwechsel oder einem Tabulatorenschritt. Solche Zeichen sind ja nicht direkt auf dem Bildschirm sichtbar, sondern steuern die Ausgabe, weshalb hier auch der Name »Steuerzeichen« einleuchtend ist. Im ASCII-Zeichencode sind diese Steuerzeichen mit den Codewerten 0 bis 31 reserviert (siehe Tabelle 5.1).


Tabelle 5.1   Steuerzeichen im ASCII-Zeichencode

Dez Hex Kürzel ASCII Bedeutung
0 0 NUL ^@ Keine Verbindung
1 1 SOH ^A Anfang Kopfdaten
2 2 STX ^B Textanfang
3 3 ETX ^C Textende
4 4 EOT ^D Ende der Übertragung
5 5 ENQ ^E Aufforderung
6 6 ACK ^F erfolgreiche Antwort
7 7 BEL ^G Signalton (Beep)
8 8 BS ^H Rückschritt (Backspace)
9 9 HT ^I Tabulatorenschritt (horizontal)
10 A NL ^J Zeilenvorschub (Newline)
11 B VT ^K Tabulatorenschritt (vertikal)
12 C NP ^L Seitenvorschub (NewPage)
13 D CR ^M Wagenrücklauf
14 E SO ^N Dauerumschaltung
15 F SI ^O Rückschaltung
16 10 DLE ^P Umschaltung der Verbindung
17 11 DC1 ^Q Steuerzeichen 1 des Gerätes
18 12 DC2 ^R Steuerzeichen 2 des Gerätes
19 13 DC3 ^S Steuerzeichen 3 des Gerätes
20 14 DC4 ^T Steuerzeichen 4 des Gerätes
21 15 NAK ^U erfolglose Antwort
22 16 SYN ^V Synchronmodus
23 17 ETB ^W Blockende
24 18 CAN ^X Zeichen für ungültig
25 19 EM ^Y Mediumende
26 1A SUB ^Z Ersetzung
27 1B ESCAPE ESC Umschaltung
28 1C FS ^\ Dateitrennzeichen
29 1D GS ^] Gruppentrennzeichen
30 1E RS ^~ Satztrennzeichen
31 1F US ^/ Worttrennzeichen

Welches Steuerzeichen hier jetzt auch wirklich die angegebene Wirkung zeigt, hängt stark vom Terminaltyp (TERM) und der aktuellen Systemkonfiguration ab. Wenn Sie im Text ein Steuerzeichen verwenden wollen, so ist dies mit (ENTER) und der (ÿ_)-Taste kein Problem, weil hierfür ja Tasten vorhanden sind. Andere Steuerzeichen hingegen werden mit einer Tastenkombination aus (Strg)+Buchstabe ausgelöst. So könnten Sie statt mit (ENTER) auch mit der Tastenkombination (Strg)+(J) einen Zeilenvorschub auslösen. Andererseits lösen Sie mit der Tastenkombination (Strg)+(C) das Signal SIGINT aus, womit Sie z. B. einen Schreibprozess abbrechen würden.

Zum Glück unterstützen Kommandos wie u. a. echo die Umschreibung solcher Steuerzeichen durch Escape-Sequenzen (was übrigens nichts mit dem Zeichen (ESC) zu tun hat). Eine Escape-Sequenz besteht aus zwei Zeichen, wovon das erste Zeichen immer mit einem Backslash beginnt (siehe Tabelle 5.2).


Tabelle 5.2   Escape-Sequenzen

Escape-Sequenz Bedeutung
\a Alarm-Ton (Beep)
\b Backspace; ein Zeichen zurück
\c continue; das Newline-Zeichen unterdrücken
\f Form Feed; einige Zeilen weiterspringen
\n Newline; Zeilenumbruch
\r return; zurück zum Anfang der Zeile
\t Tabulator (horizontal)
\v Tabulator (vertikal); meistens eine Zeile vorwärts
\\ das Backslash-Zeichen ausgeben
\0nnn ASCII-Zeichen in oktaler Form (nur sh und ksh); z. B. aus \0102 wird B (dezimal 66)
\nnn ASCII-Zeichen in oktaler Form (nur Bash); z. B. aus \102 wird wird B (dezimal 66)


Hinweis   Wie bereits erwähnt wurde, beachtet die Bash diese Escape-Sequenzen mit echo nur, wenn Sie die Option -e mit angeben.


Ein weiteres Beispiel zu den Escape-Sequenzen:

# Demonstriert den echo-Befehl
# aecho4
echo "Mehrere Newline-Zeichen\n\n\n"
echo "Tab1\tTab2\tEnde"
echo "bach\bk"
# Alternativ für die bash mit Option -e
# echo -e "Mehrere Newline-Zeichen\n\n"
# echo -e "Tab1\tTab2\tEnde"
# echo -e "bach\bk"

Das Script bei der Ausführung:

you@host > ./aecho4
Mehrere Newline-Zeichen
Tab1    Tab2    Ende
zurück

Rheinwerk Computing

5.2.2 print (Korn-Shell only)  downtop

Die Korn-Shell bietet mit print (nicht zu verwechseln mit printf) eine fast gleiche Funktion wie echo, allerdings bietet es einige Optionen mehr an. Hier die Optionen zur Funktion print in der Korn-Shell (siehe Tabelle 5.3):


Tabelle 5.3   Optionen für den print-Befehl (Korn-Shell only)

Option Bedeutung
–n Newline unterdrücken
–r Escape-Sequenzen ignorieren
–u n Ausgabe von print erfolgt auf den Filedeskriptor n
–p Ausgabe von print erfolgt auf Co-Prozess
Argumente, die mit - beginnen, werden nicht als Option behandelt.
–R wie -, mit Ausnahme der Angabe von –n


Rheinwerk Computing

5.2.3 Der Befehl printf  downtop

Wer schon einmal mit der C-Programmierung in Kontakt gekommen ist, der hat bereits mehr als einmal mit dem printf-Befehl zur formatierten Ausgabe zu tun gehabt. Allerdings ist dieses printf im Gegensatz zum printf der C–Bibliothek ein echtes Programm und unabhängig von der Shell (also kein Builtin-Kommando). Die Syntax:

printf format argument1 argument2 ... argument_n

»format« ist hierbei der Formatstring, der beschreibt, wie die Ausgaben der Argumente »argument1« bis »argument_n« zu formatieren sind. Somit ist der Formatstring im Endeffekt eine Schablone für die Ausgabe, die vorgibt, wie die restlichen Parameter (»argument1« bis »argument_n«) ausgegeben werden sollen. Befindet sich im Formatstring ein bestimmtes Zeichenmuster (bspw. %s für eine Zeichenkette (s = String)), wird dies durch das erste Argument (argument1) von printf ersetzt und formatiert ausgegeben. Befindet sich ein zweites Zeichenmuster im Formatstring, wird dies durch das zweite Argument (argument2) hinter dem Formatstring von printf ersetzt usw. Werden mehr Zeichenmuster im Formatstring angegeben, als Argumente vorhanden sind, werden die restlichen Zeichenketten mit "" formatiert.

Ein Zeichenmuster wird durch das Zeichen % eingeleitet und mit einem weiteren Buchstaben abgeschlossen. Mit dem Zeichenmuster %s geben Sie etwa an, dass hier eine Zeichenkette mit beliebiger Länge ausgegeben wird. Welche Zeichenmuster es gibt und wie diese aussehen, können Sie Tabelle 5.4 entnehmen:


Tabelle 5.4   Zeichenmuster für printf und deren Bedeutung

Zeichenmuster Typ Beschreibung
%c Zeichen Gibt ein Zeichen entsprechend dem Parameter aus.
%s Zeichenkette Gibt eine Zeichenkette beliebiger Länge aus.
%d oder %i Ganzzahl Gibt eine Ganzzahl mit Vorzeichen aus.
%u Ganzzahl Gibt eine positive Ganzzahl aus. Negative Werte werden dann in der positiven CPU-Darstellung ausgegeben.
%f reelle Zahl Gibt eine Gleitpunktzahl aus.
%e oder %E reelle Zahl Gibt eine Gleitpunktzahl in der Exponentialschreibweise aus.
%x oder %X Ganzzahl Gibt eine Ganzzahl in hexadezimaler Form aus.
%g oder %G reelle Zahl Ist der Exponent kleiner als –4, wird das Format %e verwendet, ansonsten %f.
%% Prozentzeichen Gibt das Prozentzeichen aus.

Hier ein einfaches Beispiel, wie Sie eine Textdatei mit folgendem Format

you@host > cat bestellung.txt
J.Wolf::10::Socken
P.Weiss::5::T-Shirts
U.Hahn::3::Hosen
Z.Walter::6::Handschuhe

in lesbarer Form formatiert ausgeben lassen können:

# Demonstriert den printf-Befehl
# aprintf1
FILE=bestellung.txt
TRENNER=::
for data in `cat $FILE`
do
   kunde=`echo $data | tr $TRENNER ' '`
   set $kunde
   printf "Kunde: %-10s Anzahl: %-5d Gegenstand: %15s\n" $1 $2 $3
done

Das Script liest zunächst zeilenweise mit cat aus der Textdatei bestellung.txt ein. Nach do werden die Trennzeichen »::« durch ein Leerzeichen ersetzt und mittels set auf die einzelnen Positionsparameter $1, $2 und $3 verteilt. Diese Positionsparameter werden anschließend mit printf als Argument für die Zeichenmuster verwendet. Das Script bei der Ausführung:

you@host > ./aprintf1
Kunde: J.Wolf     Anzahl: 10    Gegenstand:          Socken
Kunde: P.Weiss    Anzahl: 5     Gegenstand:        T-Shirts
Kunde: U.Hahn     Anzahl: 3     Gegenstand:           Hosen
Kunde: Z.Walter   Anzahl: 6     Gegenstand:      Handschuhe

Wie Sie im Beispiel außerdem sehen, können hierbei auch die Escape-Sequenzen wie \n usw. im Formatstring verwendet werden. Ein Vorteil ist es zugleich, dass Sie in der Bash die Escape-Zeichen ohne eine Option wie –e bei echo anwenden können.

Im Beispiel wurde beim Formatstring das Zeichenmuster mit einer erweiterten Angabe formatiert. So können Sie zum Beispiel durch eine Zahlenangabe zwischen % und dem Buchstaben für das Format die minimale Breite der Ausgabe bestimmen. Besitzt ein Argument weniger Zeichen, als Sie mit der minimalen Breite vorgegeben haben, so werden die restlichen Zeichen mit einem Leerzeichen aufgefüllt.

Auf welcher Seite hier mit Leerzeichen aufgefüllt wird, hängt davon ab, ob sich vor der Ganzzahl noch ein Minuszeichen befindet. Setzen Sie nämlich noch ein Minuszeichen vor die Breitenangabe, wird die Ausgabe linksbündig justiert.

Hier können Sie noch näher spezifizieren, indem Sie einen Punkt hinter der Feldbreite gefolgt von einer weiteren Ganzzahl verwenden. Dann können Sie die Feldbreite von der Genauigkeit trennen (siehe anschließendes Beispiel). Bei einer Zeichenkette definieren Sie dabei die Anzahl von Zeichen, die maximal ausgegeben werden. Bei einer Fließkommazahl wird hiermit die Anzahl der Ziffern nach dem Komma definiert und bei Ganzzahlen die minimale Anzahl von Ziffern, die ausgegeben werden sollen – wobei Sie niemals eine Ganzzahl wie etwa 1234 durch %.2d auf zwei Ziffern kürzen können. Verwenden Sie hingegen eine größere Ziffer, als die Ganzzahl Stellen erhält, werden die restlichen Ziffern mit Nullen aufgefüllt. Hier ein Script, das die erweiterten Formatierungsmöglichkeiten demonstrieren soll:

# Demonstriert den printf-Befehl
# aprintf2
text=Kopfstand
a=3
b=12345
printf "|01234567890123456789|\n"
printf "|%s|\n" $text
printf "|%20s|\n" $text
printf "|%-20s|\n" $text
printf "|%20.4s|\n" $text
printf "|%-20.4s|\n\n" $text
printf "Fließkommazahl: %f\n" $a
printf "gekürzt       : %.2f\n" $a
printf "Ganzzahl      : %d\n" $b
printf "gekürzt       : %.2d\n" $b
printf "erweitert     : %.8d\n" $b

Das Script bei der Ausführung:

you@host > ./aprintf2
|01234567890123456789|
|Kopfstand|
|           Kopfstand|
|Kopfstand           |
|                Kopf|
|Kopf                |
Fließkommazahl: 3,000000
gekürzt       : 3,00
Ganzzahl      : 12345
gekürzt       : 12345
erweitert     : 00012345

Rheinwerk Computing

5.2.4 Der Befehl tput – Terminalsteuerung  toptop

Häufig will man neben der gewöhnlichen Ausgabe auch das Terminal oder den Bildschirm steuern: etwa den Bildschirm löschen, Farben verwenden oder die Höhe und Breite des Bildschirms ermitteln. Dies und noch vieles mehr können Sie mit tput realisieren. tput ist übrigens auch ein eigenständiges Programm (kein Builtin) und somit unabhängig von der Shell. Zum Glück kennt tput die Terminalbibliothek terminfo (früher auch /etc/termcap), in der viele Attribute zur Steuerung des Terminals abgelegt sind. Dort finden Sie eine Menge Funktionen, von denen Sie hier nur die nötigsten kennen lernen. Einen umfassenderen Einblick können Sie über die entsprechende Manual-Page von terminfo gewinnen.

Wie sieht ein solcher Eintrag in terminfo aus? Verwenden wir doch als einfachstes Beispiel clear, womit Sie den Bildschirm des Terminals löschen können.

you@host > tput clear | tr '\033' 'X' ; echo
X[HX[2J

Hier erhalten Sie die Ausgabe der Ausführung von clear im Klartext. Es muss allerdings das Escape-Zeichen (\033) durch ein »X« oder Ähnliches ausgetauscht werden, weil ein Escape-Zeichen nicht darstellbar ist. Somit lautet der Befehl zum Löschen des Bildschirms hier:

\033[H\033[2J

Mit folgender Eingabe könnten Sie den Bildschirm löschen:

you@host > echo '\033[H\033[2J'

oder in der Bash:

you@host > echo -en '\033[H\033[2J'

Allerdings gilt dieses Beispiel nur, wenn »echo $TERM« die xterm ist. Es gibt nämlich noch eine Reihe weiterer Terminaltypen, weshalb Sie mit dieser Methode wohl nicht sehr weit kommen werden – und dies ist auch gar nicht erforderlich, da es hierfür ja die Bibliothek terminfo mit der Funktion tput gibt. Die Syntax von tput lautet:

tput Terminaleigenschaft

Wenn Sie sich die Mühe machen, die Manual-Page von terminfo durchzublättern, so finden Sie neben den Informationen zum Verändern von Textattributen und einigen steuernden Terminal-Eigenschaften auch Kürzel, mit denen Sie Informationen zum aktuellen Terminal abfragen können.


Tabelle 5.5   Informationen zum laufenden Terminal

Kürzel Bedeutung
cols Aktuelle Anzahl der Spalten
lines Aktuelle Anzahl der Zeilen
colors Aktuelle Anzahl der Farben, die das Terminal unterstützt.
pairs Aktuelle Anzahl der Farbenpaare (Schriftfarbe und Hintergrund), die dem Terminal zur Verfügung stehen.

Diese Informationen lassen sich in einem Script folgendermaßen ermitteln:

# Demonstriert den tput-Befehl
# tput1
spalten=`tput cols`
zeilen=`tput lines`
farben=`tput colors`
paare=`tput pairs`
echo "Der Typ des Terminals $TERM hat im Augenblick"
echo " + $spalten Spalten und $zeilen Zeilen"
echo " + $farben Farben und $paare Farbenpaare"

Das Script bei der Ausführung:

you@host > ./tput1
Der Typ des Terminals xterm hat im Augenblick
 + 80 Spalten und 29 Zeilen
 + 8 Farben und 64 Farbenpaare

Zum Verändern der Textattribute finden Sie in tput ebenfalls einen guten Partner. Ob hervorgehoben, invers oder unterstrichen, auch dies ist mit der Bibliothek terminfo möglich. Tabelle 5.6 nennt hierzu einige Kürzel und deren Bedeutung.


Tabelle 5.6   Verändern von Textattributen

Kürzel Bedeutung
bold Etwas hervorgehobenere (fette) Schrift
boldoff Fettschrift abschalten
blink Text blinken
rev Inverse Schrift verwenden
smul Text unterstreichen
rmul Unterstreichen abschalten
sgr0 Alle Attribute wiederherstellen (also normale Standardeinstellung)

Auch zu den Textattributen soll ein Shellscript geschrieben werden:

# Demonstriert den tput-Befehl
# tput2
fett=`tput bold`
invers=`tput rev`
unterstrich=`tput smul`
reset=`tput sgr0`
echo "Text wird ${fett}Hervorgehoben${reset}"
echo "Oder gerne auch ${invers}Invers${reset}"
echo "Natürlich auch mit ${unterstrich}Unterstrich${reset}"

Das Script bei der Ausführung:


Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 5.1   Ein Script mit veränderten Textattributen


Wenn Ihnen tput colors mehr als den Wert 1 zurückgibt, können Sie auch auf Farben zurückgreifen. Meistens handelt es sich dabei um acht Farben. Je acht Farben für den Hintergrund und acht für den Vordergrund ergeben zusammen 64 mögliche Farbenpaare, welche Sie mit

# Vordergrundfarbe setzen
tput setf Nummer
# Hintergrundfarbe setzen
tput setb Nummer

aktivieren können. Für Nummer können Sie einen Wert zwischen 0 und 7 verwenden, wobei die einzelnen Nummern gewöhnlich den folgenden Farben entsprechen:


Tabelle 5.7   Farbenwerte für den Vorder- und Hintergrund

Nummer Farbe
0 Schwarz
1 Blau
2 Grün
3 Gelb
4 Rot
5 Lila
6 Cyan
7 Grau

In der Praxis können Sie die Farben zum Beispiel dann so einsetzen:

# Demonstriert den tput-Befehl
# tput3
Vgruen=`tput setf 2`
Vblau=`tput setf 1`
Hschwarz=`tput setb 0`
Hgrau=`tput setb 7`
reset=`tput sgr0`
# Farbenpaar Schwarz-Grün erstellen
Pschwarzgruen=`echo ${Vgruen}${Hschwarz}`
echo  $Pschwarzgruen
echo "Ein klassischer Fall von Schwarz-Grün"
echo  ${Vblau}${Hgrau}
echo "Ein ungewöhnliches Blau-Grau"
# Alles wieder Rückgängig machen
echo $reset

Natürlich finden Sie in der Bibliothek terminfo auch steuernde Terminal-Eigenschaften, nach denen häufig bevorzugt gefragt wird. Mit steuernden Eigenschaften sind hier Kürzel in terminfo gemeint, mit denen Sie die Textausgabe auf verschiedensten Positionen des Bildschirms erreichen können.


Tabelle 5.8   Steuernde Terminal-Eigenschaften

Kürzel Bedeutung
home Cursor auf die linke obere Ecke des Bildschirms setzen
cup n m Cursor auf die n-te Zeile in der m-ten Spalte setzen
dl1 Aktuelle Zeile löschen
il1 Zeile an aktueller Position einfügen
dch1 Ein Zeichen in der aktuellen Position löschen
clear Bildschirm löschen

Zu guter Letzt noch ein Shellscript, das Ihnen diese Funktionen zum Steuern des Terminals demonstrieren soll.

# Demonstriert den tput-Befehl
# tput4
Dline=`tput dl1`     # Zeile löschen
Iline=`tput il1`     # Zeile einfügen
Dscreen=`tput clear` # Bildschirm löschen
# Bildschirm löschen
echo $Dscreen
tput cup 9 10
echo "------------------------------"
tput cup 10 10
printf "|%28s|" ""
tput cup 11 10
printf "|%5s Ein Teststring %7s|" " " " "
tput cup 12 10
printf "|%28s|" ""
tput cup 13 10
echo "------------------------------"
# Kurze Pause
sleep 2
tput cup 11 10
# Zeile löschen
echo $Dline
sleep 2
tput cup 11 10
printf "${Iline}|%7s neuer String %7s|" " " " "
sleep 2
echo $Dscreen

Hinweis   Dieser Abschnitt stellt natürlich nur einen kurzen Einblick in die Funktionen von terminfo dar. Die Funktionsvielfalt (bei einem Blick auf die Manual-Page) ist erschlagend, dennoch werden Sie in der Praxis das meiste nicht benötigen, und für den Hausgebrauch sind Sie hier schon recht gut gerüstet.




Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
 << zurück
  
  Zum Katalog
Zum Katalog: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Katalog: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Katalog: Linux Handbuch






 Linux Handbuch


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de