24.02.2013 Aufrufe

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

2.5 Shells 89<br />

so weit wie wir sie kennen – hält sich mit klaren Aussagen zurück. Experimentell<br />

konnten wir nur e<strong>in</strong>en Unterschied h<strong>in</strong>sichtlich der Umgebungsvariablen<br />

EDITOR feststellen.<br />

Der Witz an den Shellscripts ist, daß sie weit mehr als nur Programmaufrufe<br />

enthalten dürfen. Die Shells verstehen e<strong>in</strong>e Sprache, die an BASIC heranreicht;<br />

sie s<strong>in</strong>d programmierbar. Es gibt Variable, Schleifen, Bed<strong>in</strong>gungen,<br />

Ganzzahlarithmetik, Zuweisungen, Funktionen, nur ke<strong>in</strong>e Gleitkommarechnung.<br />

Die Syntax gleicht e<strong>in</strong>er Mischung von BASIC und C. Man muß das<br />

Referenz-Handbuch oder die man-Seite zur Shell sorgfältig lesen, gerade wegen<br />

der Ähnlichkeiten. Die Shells s<strong>in</strong>d ziemlich p<strong>in</strong>gelig, was die Schreibweise<br />

(Syntax) anbetrifft: manchmal müssen Leerzeichen stehen, e<strong>in</strong> anderes Mal<br />

dürfen ke<strong>in</strong>e stehen. Oft hilft e<strong>in</strong> bißchen Experimentieren weiter. Kommentar<br />

wird mit e<strong>in</strong>em Doppelkreuz e<strong>in</strong>geleitet, das bis zum Zeilenende wirkt.<br />

Hier e<strong>in</strong> e<strong>in</strong>faches Shellskript zum Ausdrucken von man-Seiten:<br />

# Shellscript prman zum Drucken von man-Seiten<br />

man $1 | col -b | /usr/local/b<strong>in</strong>/lf2cl | lp -dlp9<br />

Programm 2.6 : Shellscript zum Drucken von man-Seiten<br />

Zuerst wird das Kommando man(1) mit dem ersten Argument der Kommandozeile<br />

aufgerufen, so wie man es von Hand e<strong>in</strong>geben würde. Das Filter<br />

col -b wirft alle Backspaces h<strong>in</strong>aus, das selbstgeschriebene Filter lf2cl<br />

stellt der man-Seite e<strong>in</strong>ige Steuerbefehle für den Drucker voran und ersetzt<br />

jedes L<strong>in</strong>e-Feed-Zeichen durch das Paar Carriage-Return, L<strong>in</strong>e-Feed. Schließlich<br />

geht der Text zu e<strong>in</strong>em Drucker. Das selbstgeschriebene Filter ist e<strong>in</strong><br />

e<strong>in</strong>faches C-Programm:<br />

/* Programm lf2cl zum Umwandeln von L<strong>in</strong>e-Feed nach<br />

Carriage-Return, L<strong>in</strong>e-Feed. Dazu Voranstellen von<br />

PCL-Escape-Folgen zur Druckersteuerung vor den Text.<br />

Programm soll als Filter <strong>in</strong> Pipe e<strong>in</strong>gefuegt werden. */<br />

#def<strong>in</strong>e DINA4 "ˇ [&l26A"<br />

#def<strong>in</strong>e LINES "ˇ [&l66F" /* 66 Zeilen/Seite */<br />

#def<strong>in</strong>e LRAND "ˇ [&a1L" /* 1 Zeichen e<strong>in</strong>ruecken */<br />

#<strong>in</strong>clude <br />

<strong>in</strong>t ma<strong>in</strong>()<br />

{<br />

<strong>in</strong>t c;<br />

pr<strong>in</strong>tf(DINA4);<br />

pr<strong>in</strong>tf(LINES);<br />

pr<strong>in</strong>tf(LRAND);<br />

while ((c = getchar()) != EOF)<br />

switch (c) {<br />

case 10:<br />

putchar(13);

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!