Übungen zu ``Shellprogrammierung''


Sommersemester 97

Blatt 4 vom: 12.5.97
letzter Abgabetermin: 26.5.97 (vor 10.00 Uhr)

Aufgabe 1 (1 Punkt)

Machen Sie sich mit den Kommandos touch und rm vertraut.

Erzeugen Sie mit UNIX-Kommandos Dateien mit folgenden Namen. Die $-Zeichen schließen dabei die Namen ein und gehören nicht mit zum gewünschten Dateinamen.

$#a$    $abb$                                        $a?b$             $a\b$
$a*b$   $date: Tue May  6 14:20:28 MET DST 1997 ;$   $--$              $a b$
$a/b$   $-a$                                         $date: `date`;$   $"$

Bitte halten Sie sich zeilenweise an die Reihenfolge!

Löschen Sie die erzeugten Dateien einzeln mit einem UNIX-Kommando.

Aufgabe 2 (1 Punkt)

Machen Sie sich mit dem Programm /home/sp/Blatt/Blatt4/Src/printArgs vertraut. Was ist der Unterschied zwischen

lyra Src 505 printArgs *

und

lyra Src 506 printArgs '*'

und wie kommt es zu der jeweiligen Ausgabe?

Aufgabe 3 (2 Punkte)

Machen Sie sich mit dem Shell-Skript /home/sp/Blatt/Blatt4/Src/skript1 vertraut. Führen Sie das Skript mit einigen Kommandozeilen-Argumente aus, und erklären Sie, was passiert.

Was geschieht bei Aufruf von

lyra Src 507 sh skript1

Stellen Sie den genauen Ablauf von der Eingabe von skript1 bis zur Ausführung von printArgs graphisch dar. Benutzen Sie Begriffe wie fork, exec, wait,...

Stellen Sie den genauen Vorgang von der Eingabe von skript1 bis zur Ausführung von echo und exit graphisch dar, wenn die erste Zeile der Datei skript1

#!/bin/sh

wäre.

Aufgabe 4 (1 Punkt)

Angenommen, Sie müssen innerhalb eines Dateibaums alle Kataloge, die jünger als ein Monat sind und deren Namen mit Loe beginnen, und alle leere Dateien gleichzeitig finden. Wie machen Sie das? Was ist wenn in dem Verzeichnis, in dem Sie sich gerade befinden, sich eine Datei Loesung befindet?

Führen Sie Ihrem Tutor die entsprechenden Schritte live vor.

Aufgabe 5 (2 Punkte)

a)
Machen Sie sich mit /home/sp/Src/3.2_script vertraut, und schreiben Sie ein Shell-Skript, welches als einziges Argument einen Benutzernamen erhält, wie z.B. bernd oder bischof. Das Skript ermittelt dann die User-ID, den vollen Namen, die Gruppen-ID und den Gruppennamen des Nutzers und gibt die gesammelten Informationen auf der Standardausgabe aus:
lyra Loesung 508 ./getUserInfo bernd
USER_NAME = bernd
FULL_NAME = Bernhard Kuehl
UID       = 101
GID       = 11
GNAME     = inform
lyra Loesung 509 echo $?
0

Was bedeuten die beiden letzten Zeilen?
b)
Schreiben Sie ein Shell-Skript, das als Kommandozeilen-Argument einen Gruppennamen bekommt und die Namen aller Benutzer aus dieser Gruppe ausgibt.
lyra Loesung 510 ./getUserNamesOfGroup stdp
Maria Munk
Jan Hannemann
Gunther Imeyer
...

Aufgabe 6 (1 Punkt)

Erklären Sie Ihrem Tutor folgenden Auszug aus einer Shellsitzung. Wozu dient das Kommando export?

lyra Loesung 511 sh
\h \W \! x='Hello world!'
\h \W \! sh
\h \W \! echo $x

\h \W \! exit
\h \W \! export x
\h \W \! sh
\h \W \! echo $x
Hello world!
\h \W \! exit
\h \W \! 

Aufgabe 7 (2 Punkte)

a)
Welche Bedenken bei der Verwendung Ihrer Shell-Skripte haben Sie? Was ist z.B. mit einem falschen Aufruf des Skripts? Was ist, wenn Kommandos innerhalb des Skripts nicht das Erwartete leisten?
b)
Vergleichen Sie ein C-Programm mit einem Shell-Skript. Wo sind die Vor- und Nachteile? Wann entscheiden Sie sich für welchen Ansatz? Was wäre für Sie ein Grenzfall?