Zwischen Aufgabe Bash
Version vom 25. November 2025, 15:56 Uhr von Thomas.will (Diskussion | Beiträge) (→Lösung (Kommentar))
Übungsaufgabe: Webserver-Steuerung mit Bash (webctl.sh)
- In dieser Aufgabe soll ein Bash-Skript einen lokalen Python-Webserver starten, stoppen, überwachen und den Status anzeigen.
- Dabei sollen die in der Bash verfügbaren Kontrollstrukturen wie case, if, for, while, until, continue, break und exit sinnvoll eingesetzt werden.
Aufgabenstellung
- Erstellen Sie ein Skript webctl.sh mit folgenden Befehlen:
- start PORT
- stop
- status
- wait
- help
Anforderungen
Argument- und Umgebungsprüfung
- Bei allen Befehlen außer help muss geprüft werden, ob python3 installiert ist.
- Beim Befehl start muss ein gültiger Port (1024–65535) angegeben werden.
- Ungültige Eingaben sollen mit exit 1, fehlende Python-Installation mit exit 2 quittiert werden.
start-Funktion
- Wenn bereits ein Webserver läuft (PID-Datei /tmp/web.pid existiert), soll ein Fehler ausgegeben werden (exit 3).
- Der Startvorgang besteht aus einer for-Schleife über fünf Versuche.
- Beim dritten Versuch soll der Webserver mit python3 -m http.server PORT im Hintergrund gestartet werden.
- Die PID soll in /tmp/web.pid gespeichert werden und die Schleife mit break verlassen werden.
- Abschluss: Ausgabe "Webserver gestartet".
stop-Funktion
- Wenn keine PID-Datei existiert, soll das Skript mit exit 4 enden.
- Mit einer while-Schleife soll der Prozess beendet werden, solange kill erfolgreich ist.
- Jeder zweite Schleifendurchlauf soll mit continue übersprungen werden.
- Nach erfolgreichem Stoppen: PID-Datei löschen und "gestoppt" ausgeben.
status-Funktion
- Wenn eine PID-Datei existiert, prüfen Sie, ob der Prozess noch läuft.
- Wenn er läuft: Ausgabe "läuft".
- Wenn nicht: Ausgabe "PID existiert, aber Prozess tot".
wait-Funktion
- Mit einer until-Schleife soll gewartet werden, bis der Prozess nicht mehr läuft.
- Alle zwei Sekunden soll "warte..." ausgegeben werden.
help-Funktion
- Gibt eine Übersicht der verfügbaren Befehle aus.
Zusatzhinweis
- Alle Fehlerfälle sollen sinnvolle Meldungen und passende exit-Codes zurückgeben.