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 95<br />

function frage<br />

{<br />

typeset -l antwort # Typ Kle<strong>in</strong>buchstaben<br />

while true<br />

do read "antwort?$1" || return 1<br />

case $antwort <strong>in</strong><br />

j|ja|y|yes|oui) return 0;;<br />

n|ne<strong>in</strong>|no|non) return 1;;<br />

*) pr<strong>in</strong>t ’Mit j oder n antworten’;;<br />

esac<br />

done<br />

}<br />

# Anwendung der Funktion frage<br />

while frage ’Weitermachen? ’<br />

do<br />

date # oder etwas S<strong>in</strong>nvolleres<br />

done<br />

Programm 2.14 : Shellscript mit e<strong>in</strong>er Funktion zum Fragen<br />

E<strong>in</strong>e Schleife wird abgebrochen, wenn<br />

• die Rücksprung- oder E<strong>in</strong>trittsbed<strong>in</strong>gung nicht mehr erfüllt ist oder<br />

• im Rumpf der Schleife das shell<strong>in</strong>terne Kommando exit, return,<br />

break oder cont<strong>in</strong>ue erreicht wird.<br />

Die Kommandos zeigen unterschiedliche Wirkungen. exit gibt die Kontrolle<br />

an das aufrufende Programm (Sitzungsshell) zurück. Außerhalb e<strong>in</strong>er Funktion<br />

hat return die gleiche Wirkung. break beendet die Schleife, das Shellscript<br />

wird nach der Schleife fortgesetzt wie bei e<strong>in</strong>er Verletzung der Bed<strong>in</strong>gung.<br />

cont<strong>in</strong>ue h<strong>in</strong>gegen führt zu e<strong>in</strong>em Rücksprung an den Schleifenanfang.<br />

Für die gleichnamigen C-Anweisungen gilt dasselbe.<br />

Shellscripts lassen sich durch Funktionen strukturieren, die sogar rekursiv<br />

aufgerufen werden dürfen, wie das folgende Beispiel zeigt:<br />

# Shellscript hanoiscript (Tuerme von Hanoi), 25.05.1992<br />

# Aufruf hanoi n mit n = Anzahl der Scheiben<br />

# nach Bolsky + Korn S. 84, veraendert<br />

# max. 16 Scheiben, wegen Zeitbedarf<br />

# Funktion, rekursiv (selbstaufrufend)<br />

function fhanoi<br />

{<br />

typeset -i x=$1-1<br />

((x>0)) && fhanoi $x $2 $4 $3<br />

pr<strong>in</strong>t "\tvon Turm $2 nach Turm $3"<br />

((x>0)) && fhanoi $x $4 $3 $2<br />

}

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!