Übungen zu ``Shellprogrammierung''


Sommersemester 97

Blatt 7 vom: 9.6.97
letzter Abgabetermin: 16.6.97 (vor 10.00 Uhr)

Aufgabe 1 (2 Punkte)

Was versteht man unter dem Begriff verankerte Suche?

Extrahieren Sie aus der Datei /home/sp/Blatt/Blatt7/Src/search die Zeilen, die eine der folgenden Anforderungen erfüllen:

1.   die Zeilen, welche mit einem a beginnen und mit einem a enden,
2.   die Zeilen, welche mit dem gleichen Zeichen beginnen und enden,
3.   die Zeilen, die vier gleiche Kleinbuchstaben enthalten,
4.   alle Palindrome, die aus fünf Buchstaben bestehen
     (kein Palindrom ist: a12321x),
5.   ein Wort enthalten, das mit einem r bzw. dem Text Opa beginnt,
6.   der Nachname Meyer (Maier, Meier, Mayer ...) in einer Variation der Schreibweise enthalten ist,
7.   alle Zeilen, die eines der Wörter eins, zwei, zzwei, eeins enthalten,
8.   ein Wort enthalten, das nicht mit einem ^, U, $ beginnt,
9.   ein Wort enthalten, das nicht mit einem ^, U, $ endet.

Zur Lösung jeder Teilaufgabe darf nur ein [ef]?grep verwendet werden.

Aufgabe 2 (1 Punkt)

Wozu dienen innerhalb eines Shell-Skripts die Variablen $1 ... $9, $#, $@, $*, $-, $?, $! und $$, und was macht das Kommando shift?

Schreiben Sie ein Shell-Skript, mit dem Sie die unterschiedlichen Möglichkeiten in der Verwendung von $* und $@ herausstellen.

Was ist der einzige richtige Ansatz, wenn Sie alle Kommandozeilen-Argumente in einer for-Schleife abarbeiten wollen? Bedenken Sie, daß es mehr als neun Argumente geben kann.

Aufgabe 3 (1 Punkt)

Schreiben Sie ein Shellskript, mit dem Sie zeigen können, worin sich '{ ... }' und '( ... )' in ihrer Funktionalität innerhalb eines Shellskripts unterscheiden.

Aufgabe 4 (3 Punkte)

Schreiben Sie ein Kommando, das die Argumente der Kommandozeile abarbeitet. Sollte das Kommando fehlerhaft aufgerufen werden, muß es einen entprechenden Hinweis geben und terminieren. Das Kommando muß eine Kommandozeile folgender Art

cmd [-h] [-l dump_level] [-d day] [-m] [-f] [-i]

verarbeiten können.

Aufgabe 5 (1 Punkt)

Schreiben Sie ein Shell-Skript, mit dem Sie alle Möglichkeiten der parameter substitution (Kapitel 6.7) austesten können.

Wie übergeben Sie in einem Shell-Skript an ein anderes Shell-Skript alle Argumente, falls welche angegeben worden sind? Sie dürfen zur Lösung des Problems keine Kontrollstruktur verwenden.

Aufgabe 6 (2 Punkte)

a)
Was bewirken folgende Zeilen? Insbesondere ist das set-Kommando von Interesse.
isolde Blatt7 822 uname -a
NeXT Mach isolde 4.1 ? i386
isolde Blatt7 823 set `uname -a`
isolde Blatt7 824

b)
Erklären Sie folgenden Sachverhalt:
lyra bernd 201 which echo
/usr/local/gnu/bin/echo
lyra bernd 202 type echo 
echo is a shell builtin

Worin unterscheiden sich type und which? Was kann type, was which nicht kann?
Schreiben Sie ein Shell-Skript mit der gleichen Funktionalität wie which. Wie kann Ihnen dabei die Variable IFS helfen? Beachten Sie mögliche Probleme.
c)
Erklären Sie folgenden Sachverhalt:
isolde Blatt7 749 [ -f blatt.txt ] && echo found
found
isolde Blatt7 750 [ -f blatt.txt ] || echo found

Aufgabe 7 (0 Punkte)

Für Menschen mit Lust zum Tüfteln hier noch eine kleine Quiz-Aufgabe:

Mit welchem regulären Ausdruck kann man aus einer Datei alle Zeilen mit einem C-Kommentar herausfiltern?

Aus der C-Sprachbeschreibung stammt: Ein Kommentar wird durch die Zeichen /* eingeleitet und durch die Zeichen */ beendet. Kommentare dürfen nicht verschachtelt werden.

Damit sind

/* dkjfdkl */
/***dkj//we** /fdkl */
/* kj /* dlkf */

korrekte und

/* ererer /* ererer */ ereer /888*/
/* ererer rer */ eree**/

unkorrekte Kommentare.