Lehrauftrag Informatik für Elektrotechnik und Maschinenbau

Übungsblatt 3 - Shell-Scripts

Die Aufgaben sind praktisch auf Unix/Linux zu lösen.

Voraussetzung ist das Infoblatt 4.
Lösungen gibt es unter loesung3.html.
weiter gehts inhaltlich mit Infoblatt 5.

1. Aufgabe  Probieren ist die Grundlage des Studierens ;-)

Bearbeiten Sie das Infoblatt Info4, indem Sie vor Allem die Beispiele ausprobieren.
Ziehen Sie gegebenenfalls die Hilfemöglichkeiten ("man befehl" für zeilenorientiere Ausgabe des Manuals oder die KDE/SuSe-Hilfe für grafikorientierte Ausgabe) hinzu.

2. Aufgabe  userinfo

Schreiben Sie ein Script userinfo, das zunächst prüft, ob ein (im Parameter angegebener) User auf der Anlage als User registriert ist und dann die in der passwd-Datei verfügbaren Informationen über diesen User ausgibt.

 

Hinweise:

-Die Userliste der Unix-Systeme erhalten Sie mit ypcat passwd (erstes Feld bis zum ?:?).

-Heraussuchen eines Strings aus einer Datei wird mit dem Kommando grep erledigt
(grep String <Datei)!
Nach dem Aufruf des grep-Kommandos steht auf der Sondervariablen $? eine Null (0), wenn das Muster gefunden wurde!

-Teile einer Zeile erhalten Sie mittels cut (-c1-10 für die ersten 10 Spalten; -f3 für das 3. Feld beim Trennzeichen -d?:?).

-Sie dürfen die Pipe verwenden!

3. Aufgabe  userinfo1

Legen Sie eine zweite Variante des userinfo-Scripts an. In diesem Script soll der Name des Users optionaler Parameter sein, d.h. wenn der Username beim Aufruf nicht mitgegeben wurde, muss er beim Ablauf des Scripts eingelesen werden. Darüber hinaus soll jetzt zusätzlich angegeben werden, wie viel Speicherplatz der User im Homedirectory belegt hat.

4. Aufgabe  mymove

Schreiben Sie ein Script mymove, das nur einen (erforderlichen) Parameter hat.

Es leistet folgendes:

· Ohne Parameter aufgerufen teilt es mit, wie es korrekt aufzurufen ist.

· Mit einem Parameter aufgerufen prüft es zunächst, ob die entsprechende Datei existiert und gelesen werden darf.

· Wenn ja, wird nachgefragt, wohin die Datei gemoved werden soll (?read?); wenn nein: Abbruch mit Meldung.

· Vor dem eigentlichen Moven soll noch geprüft werden, ob das Ziel schon existiert.

· Ist das der Fall, wird nachgefragt, ob die existierende Datei gelöscht werden darf; ist es nicht der Fall, kann ja ohne Probleme gemoved werden.
 

5. Aufgabe mygrep

Schreiben Sie ein Script mygrep, das zwei Parameter hat (sonst übliche Fehlermeldung). Der erste Parameter stellt einen Suchstring dar, der zweite Parameter stellt den Dateinamen dar.
Das mygrep soll jeweils für die übergebene Datei zunächst prüfen, ob sie lesbar ist.

Dann soll eine Überschriftszeile ausgegeben werden, die den Namen der Datei enthält.
Dann soll der Suchstring mittels grep in der Datei gesucht werden.
Schließlich soll danach, wenn der Suchstring nicht gefunden wurde, eine entsprechende Bemerkung ausgegeben werden. Dies entfällt, wenn der Suchstring gefunden wurde (denn dann gibt grep ja den Text aus).

6. Aufgabe  Telefonverzeichnis eines/einer Studierenden

Schreiben Sie die notwendigen drei Scripts für die Verwaltung eines Telefonverzeichnisses.
Es sollen möglich sein:

· Adressliste komplett ausgeben

· Adresse eintragen (inkl. Prüfen, ob schon der gleiche Name vorhanden ist)

· Zu einer Person die Telefonnummer suchen.
 

 

Nebenbedingung:

Die Adress- und Telefonnummern-Einträge in der Datei verz.tel sollen das (an /etc/passwd angelehnte) folgende Format haben:

Name:Vorname:Ort:(Vorwahl) Telefonnummer

7. Aufgabe  Schleifen

Kopieren Sie die Scripts userinfo, userinfo1 und mygrep in jeweils neue Dateien ui, ui1 und mg.
Schreiben Sie diese Dateien dann um, so dass die Scripts jeweils mehrere Parameter verarbeiten können.

 

Wichtiger Hinweis:
 

Die Abarbeitung mehrerer Parameter erfolgt durch Verarbeitung des jeweils ersten Parameters. Anschließend wird dieser Parameter mittels des shift-Kommandos eliminiert.

Das shift-Kommando rückt alle Parameter $n auf den Platz von $n-1, $1 verschwindet, $# wird um eins verringert.

Beispiel:

vor dem shift: $1=a  $2=b  $3=c  $#=3

dann shift.

nach dem shift:  $1=b  $2=c  $#=2