BUGH Wuppertal Fachbereich 7 - Mathematik Axel Rogat
Betriebssysteme und betriebssystemnahes Programmieren
Übungsblatt 3

Aufgabe 5
Schreiben Sie ein Shell-Skript, das die Namen aller Shell-Skripte im aktuellen Verzeichnis ausgibt.

Als Kennzeichen für ein Shell-Skript werten Sie dabei, daß die erste Zeile mit "#!" beginnt und mit einem "sh" aufhört. Die Datei braucht nicht ausführbar zu sein. Geben Sie aber hinter jeder als ausführbar gekennzeichneten solchen Datei ein "(x)" aus!

Hinweise:

Die erste Zeile können Sie mit dem UNIX-Kommando head isolieren. Testen Sie ihren Inhalt mit grep und einem passenden regulären Ausdruck. Schließlich können Sie mit wc die Ausgabe von grep auswerten.

Das Ergebnis Ihrer Überprüfung werten Sie dann mit "if test ..." aus, ebenso verfahren Sie beim Test auf Ausführbarkeit.

Aufgabe 6
Schreiben Sie ein Shell-Skript, das eine Funktionstabelle für die Funktion x -> x2 für ganze Zahlen x=1,...,n ausgibt.

Die Grenze 1<=n<=316 soll als Aufrufparameter übergeben werden. Wenn kein Parameter angegeben wird, soll n=10 angenommen werden. Ungültige Werte für n sollen abgefangen werden.

Die Tabelle soll wie folgt lesbar formatiert sein: Die x-Werte sollen rechtsbündig mit 3 Zeichen Breite, die x2-Werte rechtsbündig mit 5 Zeichen Breite ausgegeben werden. Zwischen beiden soll ein Pfeil "->" stehen. Für n=4 ergibt sich also folgende Ausgabe (der Deutlichkeit halber sind die einzufügenden Spaces als `·' dargestellt):

··1 -> ····1 ··2 -> ····4 ··3 -> ····9 ··4 -> ···16
Hinweise:

Die Schleife für x=1,...,n sollten Sie mit einem while realisieren. Zum Hinaufzählen der Laufvariablen verwenden Sie das expr-Kommando, ebenso für das Berechnen des Quadrats.

Sie sollen hier natürlich nicht ein Kommando wie printf verwenden, sondern die Formatierung mit Hilfe von Schleifen selbst durchführen (passend viele Spaces erzeugen). Verwenden Sie ebenfalls eine while-Schleife (pro Spalte). Sie dürfen beliebig viele Hilfsvariablen einführen. Beachten Sie, daß beim Aneinanderhängen von Strings aneinanderstoßende Spaces eventuell verschluckt werden. Füllen Sie daher zunächst z.B. mit Underscores auf (also "__3", etc.) und ersetzen Sie in der Ausgabe mit Hilfe von tr die Underscores durch Spaces.

Aufgabe 7
Schreiben Sie ein Shell-Skript, das exakt dasselbe tut wie das C-Programm aus Aufgabe 1 (Erzeugung einer Directory-Struktur in Form eines Binärbaums).

  1. Verwenden Sie nur die Fähigkeiten der normalen Shells wie sh, also beispielsweise keine Funktionsdefinitionen im Stil der bash.

    Hinweise:

    Sie benötigen dazu ein Hilfsskript, das sich rekursiv selbst aufruft. Im Hauptskript fangen Sie die Fehlerfälle (kein Parameter angegeben, ungültiger Wert übergeben) ab. Merken Sie sich die übergebene Grenze in einer Variablen und exportieren Sie sie! Dann rufen Sie Ihr Hilfsskript mit dem Parameter "1" auf.

    Beachten Sie, daß Sie zwischenzeitlich in Unterverzeichnisse wechseln müssen. Damit Sie Ihr Hilfsskript aufrufen können, sollten Sie sich im Haupt-Skript dessen Pfad ebenfalls in einer Variablen merken!

    Im Hilfsskript findet die Bereichs-Überprüfung, die Erzeugung eines Directories und der doppelte rekursive Aufruf statt (bestimmen Sie die Aufrufparameter dafür wieder mit Hilfe des Befehls expr).

    Wenn eines der Directories nicht angelegt werden kann, gibt der mkdir-Befehl eine Fehlermeldung ("File exists" o.ä.) aus. Unterdrücken Sie diese und geben Sie stattdessen eine eigene Meldung aus!

  2. Bauen Sie Ihr Skript so um, daß es die Funktionsdefinitionen der bash verwendet. Sie brauchen dann kein Hilfsskript mehr, und die Funktion darf sich direkt rekursiv aufrufen.

email: axel@math.uni-wuppertal.de Zurück Abgabe: 17.5.1999
 

© 1999 Axel Rogat