                                                       9. Uebungsblatt
______________________________________________________________________
Aufgabe 1 (0 Punkte)

    Lest nochmal die Dokumentation zu awk, sed und den anderen UNIX-
    Textwerkzeugen (vorlesungsbegleitende Unterlagen Nummer 4), sowie
    die Dokumentation zu lex und bison.

    Legt eine Unterdirectory ueb9 in Eurem Uebungsverzeichnis an.

______________________________________________________________________
Aufgabe 2 (4 Punkte)

    In ~unix2/bin/freesun steht ein shell-Skript, das die zwanzig am
    wenigsten ausgelasteten Sun-4-Rechner des Fachbereichs sucht.
    Dieses Shell-Skript hat einen wichtigen Mangel: Es liefert alle
    Rechner, unabhaengig davon, ob sie am selben Netz haengen wie der
    eigene Rechner[1].  Schreibt dieses shell-Skript so zu einem
    Skript nearsun um, dass nur noch Rechner aus dem eigenen Netz
    angezeigt werden.

    Hinweis: die eigenen Adressen findet man mit ifconfig -a
    (Schluesselwort inet), die Adressen der anderen Hosts in dem File
    /etc/hosts (dabei nicht vergessen, die aliases dort mit zu
                                           -------
    beachten und die Kommentare zu ignorieren -- es ist vermutlich am
    einfachsten, das File zunaechst so umzuarbeiten, dass Hosts mit
    mehreren Namen auch mehrfach in einem Ausgabefile stehen).  Das
    Netz zu einem Rechner findet man (vereinfacht) dadurch, dass man
    die letzte Komponente der Adresse weglaesst.

    Die Loesung muss nicht sehr effizient sein, soll aber nicht einen
    linearen Aufwand (gemessen in Kommando-Aufrufen) relativ zur
    Anzahl der Hosts zeigen.

______________________________________________________________________
Aufgabe 3 (6 Punkte)

    Schreibt mit lex und yacc einen kleinen Parser, der Kommandozeilen
    fuer eine Shell erkennt.  Korrekte Eingabezeilen sollen geeignet
    ausgegeben werden; falsche Eingabezeilen sollen mit einer geeig-
    neten Fehlermeldung zurueckgewiesen werden.  Der Parser soll Pipes
    (|), Sequenzen (;) und Hindergrundausfuehrungen (&) sowie Umleiten
    von Standardeingabe und -ausgabe (inklusive >>) richtig erkennen.
    Parsieren von eingebauten Shell-Kommandos (if, for, while, ...)
    ist nicht gefordert.  Ihr koennt Euch bei den Fehlermeldungen an
    csh(1) orientieren.

    Beispiel fuer eine Testausgabe:

    % pic <bla.pic -T300 | nroff > bla ; </etc/motd cat&
    pic -T300       Input: bla.pic    Output: PIPE
    nroff -ms       Input: PIPE       Output: bla
    cat             Input: /etc/motd  Output: -
    % pic <bla.pic -T300 | <file nroff > bla & </etc/motd cat;
    Ambiguous input redirect.
    % pic <bla.pic -T300 | | > bla ;
    Invalid null command.
    %

______________________________________________________________________
Abgabe

    Elektronisch[2] am 22.06.1993, 18:00 MEZ.

_________________________

  [1] Dies fuehrt dazu, dass unnoetiger Transitverkehr  zwischen  zwei
Netzen  auftritt  und  kostet  so  deutlich mehr an Gesamtleistung des
Fachbereichsnetzes als ein lokaler Zugriff innerhalb eines Netzes.

  [2] Der Tutor begutachtet die Files  ~/unix2/ueb9/nearsun  und  alle
evtl.    von    diesem    Shell-File   referenzierten   Files,   sowie
~/unix2/ueb9/shell.l, ~/unix2/ueb9/shell.y, und ~/unix2/ueb9/Makefile.

UNIX-2 SS 93   Bormann et al                                         1


