Network Services VU 2.0, Lab Beispiel 2


SS 2006 - Johann Oberleitner - Letzte Änderung: Fri Jan 12 16:17:11 WEST 2007



Tasks

Unteraufgabe Beschreibung
Shell-Script zum Testen von Lab 1 Schreiben Sie ein Shell-Script testlab1.sh, dass überprüft, ob die beiden Aufgaben aus Lab1 richtig gelöst wurden.

Als erstes Argument soll das Script eine Host-Adresse entgegennehmen, von der entsprechend überprüft wird, ob Sie am Nameserver des Rechners korrekt konfiguriert wurde.

Als weitere Argumente soll eine Liste von Matrikelnummern angegeben werden. Für diese Matrikelnummern soll überprüft werden, ob es sowohl einen Eintrag mit passendem Benutzernamen nwsXXXXXXX (XXXXXXX durch die Matrikelnummer austauschen) in /etc/passwd gibt, und ob das dazugehörige Home Verzeichnis in /home existiert.

Geben Sie für jeden dieser Tests entsprechende Texte auf der Commandline aus. Siehe Beispiel unten. Nach jedem Test soll entsprechend OK oder FALSE ausgegeben werden. Entsprechend ob alles Tests ok gehen oder fehlschlagen, soll der Existatus 0 bzw. 1 ausgegeben werden.

Angabe für einen Beispielaufruf: ./testlab1.sh www 95111111 96222222 97333333

Die Ausgabe kann folgendermassen aussehen:

Test ob der Domainname fuer www existiert.
DNS fuer www korrekt konfiguriert.               OK
			
Test ob ein Benutzer für den Studierenden mit der Matrikelnummer 95111111 angelegt wurde.
Benutzer nws95111111 in /etc/passwd vorhanden.   OK
Benutzer Verzeichnis /home/nws95111111 angelegt. OK

Test ob ein Benutzer für den Studierenden mit der Matrikelnummer 96222222 angelegt wurde.
Benutzer nws95111111 in /etc/passwd vorhanden.   FAIL
Benutzer Verzeichnis /home/nws95111111 angelegt. FAIL

Test ob ein Benutzer für den Studierenden mit der Matrikelnummer 97333333 angelegt wurde.
Benutzer nws95111111 in /etc/passwd vorhanden.   OK
Benutzer Verzeichnis /home/nws95111111 angelegt. OK
Extrahieren von Process IDs Das UNIX Commando ps gibt für einen Prozess verschiedene Daten aus(zB: ps -aux). Schreiben Sie ein shellscript getpid.sh, dass einen Processnamen als Argument entgegennimmt. Für diesen Prozessnamen soll der Benutzer der den Prozess gestartet hat ausgegeben werden, sowie die PID (Process-ID). Beides erhält man über das ps Commando. Der Benutzername soll nur dann ausgegeben werden, wenn als erstes Argument -u angegeben wird. Fehlt -u soll nur die PID ausgegeben werden.

Anmerkung: Die PID wird zum Beispiel vom kill Commando zum manuellen Beenden eines Processes benötigt.

Angabe für einen Beispielaufruf: ./getpid.sh named

Die Ausgabe kann folgendermassen aussehen:

15553
bzw. bei Angabe des Parameters -u mit Tabulator getrennt.
root 	15553
		
Zählen von Klassen Schreiben Sie ein Shell-Script countclasses.sh, dass die Klassen in einem bzw. mehreren Java-Files zählt. Berücksichtigen Sie, dass auch innere Klassen gezählt werden sollen. class Statements innerhalb von Java-Kommentaren bzw. Strings sollen nicht gezählt werden.

Als Argumente sollen die Namen der Java Sourcefiles entgegengenommen werden.

Hinweis: verwenden Sie neben der bash auch sed.

Angabe für einen Beispielaufruf: ./countclasses.sh MyClass1.java MyClass2.java

Die Ausgabe kann folgendermassen aussehen:

MyClass1.java	3   classes
MyClass2.java	1   class
Berechnen des Notendurchschnitts Berechnen Sie ausgehend von einer Eingangsliste den Notendurchschnitt für eine LVA. Dabei sollen 5 Argumente für Punktegrenzen angegeben werden. Vom Standard-Inputstream kommt eine Liste mit Feldern, die (in dieser Reihenfolge) die Studentendaten (mit Space bzw. Tab getrennt) enthalten: Nachname, Vorname, Matrikelnummer, Kennzahl, Punktezahl.

Verwenden Sie bash, sed und awk um dieses Beispiel zu lösen. Hinweis: Sie können zum Beispiel mit einem temporären awk-Script arbeiten.

Angabe für einen Beispielaufruf: ./grades.sh 50 65 75 85 100 < studentdata.txt

Die Studentdata.txt enthält zb solche Daten
Max Mustermann  9333333	 526	73
Susi Mueller	9422222  933	37	
		...
		

Die Ausgabe soll so aussehen:

Notenskala	Note	Anzahl	Anteil
85 - 100	1	2	20%
75 - 85		2	0	0%
65 - 75		3	3	30%
50 - 65		4	3	30%
<50		5	2	20%
		
Verknüpfen von Daten Erstellen Sie ein SQL Script makeaccounts.sh zum Erstellen der Account-Information für das Network-Services Forum. Dazu gibt es 3 Dateien, die als Argument angegeben werden: Eine Liste mit Gruppeneinteilungen wie in gruppenliste.txt. Weiters eine Liste mit Studentendaten, die Matrikelnummer, Nachname, Vorname, Kennzahl, und email-Adresse (mit "," getrennt) enthalten. Als dritte Datei gibt es eine Datei mit Passwörtern im Plain-Text. Diese Datei enthält in der ersten Spalte eine Gruppennummer, in der zweiten Spalte steht hier das Passwort als String.

Das Script makeaccounts.sh nimmt 4 Argumente entgegen: Gruppennummer, gruppenliste, studentendaten, passworddatei.

		...
		Gruppe 42
		
		9999999 Mustermann Maximilian
		9876543	Sommerfrau Susanne	
		...
	

Die Liste mit den Studentendaten sieht so aus:

		...
		9999999,Mustermann,Maximilian,526,max@mustermann.com
		9876543,Sommerfrau,Susanne,933,susi@sommerfrau.net
		...
	

Die Passwortdatei sieht so aus:

		41 abrakdab
		42 abcdefgh
	

Erzeugen Sie für jeden Student ein SQL-Command. Dieses Commando würde zum Beispiel für 'Maximilian Mustermann', Kennzahl 526, Matrikelnummer 9999999, email: max@mustermann.com so aussehen:
INSERT INTO users(group_id,username,password,email,lastname,firstname,kennzahl,email) VALUES(4,'nws9999999',SHA1('abcdefgh'),'Mustermann','Maximilian',526,'max@mustermann.com'). Das Passwort 'abcdefgh' wird über die Gruppenzugehörigkeit aus dem Passwort-File extrahiert.