Zwischen Aufgabe Bash: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „= Übungsaufgabe: Webserver-Steuerung mit Bash (webctl.sh) = *In dieser Aufgabe soll ein Bash-Skript einen lokalen Python-Webserver starten, stoppen, überwac…“) |
(→Zusatz) |
||
| (2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | = Übungsaufgabe: Webserver- | + | = Übungsaufgabe: Einfacher Webserver-Controller (webctl.sh) = |
| − | *In dieser Aufgabe soll ein Bash-Skript einen | + | *In dieser Aufgabe soll ein kleines Bash-Skript einen Python-Webserver starten, stoppen und überwachen. |
| − | *Dabei sollen | + | *Dabei sollen grundlegende Kontrollstrukturen (case, if, for, while, until, break, continue, exit) verwendet werden. |
== Aufgabenstellung == | == Aufgabenstellung == | ||
*Erstellen Sie ein Skript '''webctl.sh''' mit folgenden Befehlen: | *Erstellen Sie ein Skript '''webctl.sh''' mit folgenden Befehlen: | ||
| − | * start | + | * start |
* stop | * stop | ||
* status | * status | ||
| − | |||
* help | * help | ||
== Anforderungen == | == Anforderungen == | ||
| − | === | + | === start === |
| − | * | + | *Prüfen Sie mit if, ob python3 installiert ist, sonst exit 1. |
| − | * | + | *Starten Sie den Webserver mit: python3 -m http.server 8000 & |
| − | * | + | *Speichern Sie die PID in /tmp/web.pid. |
| + | *Verwenden Sie eine kleine for-Schleife (3 Versuche), die beim zweiten Versuch mit break abbricht. | ||
| − | === | + | === stop === |
| − | *Wenn | + | *Wenn die PID-Datei fehlt → Fehlermeldung und exit 2. |
| − | * | + | *Mit einer while-Schleife kill auf die PID ausführen, solange der Prozess noch läuft. |
| − | * | + | *Jeden zweiten Schleifendurchlauf mit continue überspringen. |
| − | * | + | *Wenn der Prozess beendet ist → PID-Datei löschen. |
| − | |||
| − | === | + | === status === |
| − | *Wenn | + | *Wenn PID-Datei vorhanden → prüfen, ob der Prozess läuft. |
| − | + | *Wenn ja: "läuft" ausgeben. | |
| − | * | + | *Wenn nein: "nicht aktiv". |
| − | * | ||
| − | === | + | === help === |
| − | * | + | *Liste der Befehle anzeigen. |
| − | |||
| − | |||
| − | == | + | == Zusatz == |
| − | * | + | *Jeder Fehlerfall soll mit einem passenden exit-Code beendet werden. |
| − | |||
| − | === help- | + | <!--- |
| − | * | + | == Lösung (Kommentar) == |
| + | <pre> | ||
| + | #!/bin/bash | ||
| + | |||
| + | CMD="$1" | ||
| + | PIDFILE="/tmp/web.pid" | ||
| + | |||
| + | case "$CMD" in | ||
| + | help|"") | ||
| + | echo "Befehle: start | stop | status | help" | ||
| + | exit 0 | ||
| + | ;; | ||
| + | esac | ||
| + | |||
| + | if ! command -v python3 >/dev/null 2>&1; then= Übungsaufgabe: Einfacher Webserver-Controller (webctl.sh) = | ||
| + | |||
| + | *In dieser Aufgabe soll ein kleines Bash-Skript einen Python-Webserver starten, stoppen und überwachen. | ||
| + | *Dabei sollen grundlegende Kontrollstrukturen (case, if, for, while, until, break, continue, exit) verwendet werden. | ||
| + | |||
| + | == Aufgabenstellung == | ||
| + | |||
| + | *Erstellen Sie ein Skript '''webctl.sh''' mit folgenden Befehlen: | ||
| + | * start | ||
| + | * stop | ||
| + | * status | ||
| + | * help | ||
| + | |||
| + | == Anforderungen == | ||
| + | |||
| + | === start === | ||
| + | *Prüfen Sie mit if, ob python3 installiert ist, sonst exit 1. | ||
| + | *Starten Sie den Webserver mit: python3 -m http.server 8000 & | ||
| + | *Speichern Sie die PID in /tmp/web.pid. | ||
| + | *Verwenden Sie eine kleine for-Schleife (3 Versuche), die beim zweiten Versuch mit break abbricht. | ||
| + | |||
| + | === stop === | ||
| + | *Wenn die PID-Datei fehlt → Fehlermeldung und exit 2. | ||
| + | *Mit einer while-Schleife kill auf die PID ausführen, solange der Prozess noch läuft. | ||
| + | *Jeden zweiten Schleifendurchlauf mit continue überspringen. | ||
| + | *Wenn der Prozess beendet ist → PID-Datei löschen. | ||
| + | |||
| + | === status === | ||
| + | *Wenn PID-Datei vorhanden → prüfen, ob der Prozess läuft. | ||
| + | *Wenn ja: "läuft" ausgeben. | ||
| + | *Wenn nein: "nicht aktiv". | ||
| − | == | + | === help === |
| − | * | + | *Liste der Befehle anzeigen. |
| + | == Zusatz == | ||
| + | *Jeder Fehlerfall soll mit einem passenden exit-Code beendet werden. | ||
| + | |||
| + | <!--- | ||
== Lösung (Kommentar) == | == Lösung (Kommentar) == | ||
<pre> | <pre> | ||
| Zeile 53: | Zeile 96: | ||
CMD="$1" | CMD="$1" | ||
| − | |||
PIDFILE="/tmp/web.pid" | PIDFILE="/tmp/web.pid" | ||
| − | |||
case "$CMD" in | case "$CMD" in | ||
help|"") | help|"") | ||
| − | echo "Befehle: start | + | echo "Befehle: start | stop | status | help" |
exit 0 | exit 0 | ||
;; | ;; | ||
esac | esac | ||
| − | command -v python3 >/dev/null 2>&1 | + | if ! command -v python3 >/dev/null 2>&1; then |
| − | |||
echo "python3 nicht gefunden" | echo "python3 nicht gefunden" | ||
| − | exit | + | exit 1 |
fi | fi | ||
case "$CMD" in | case "$CMD" in | ||
start) | start) | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
if [ -f "$PIDFILE" ]; then | if [ -f "$PIDFILE" ]; then | ||
echo "Server läuft bereits" | echo "Server läuft bereits" | ||
| Zeile 89: | Zeile 117: | ||
fi | fi | ||
| − | for i in 1 2 3 | + | for i in 1 2 3; do |
echo "Starte... Versuch $i" | echo "Starte... Versuch $i" | ||
| − | if [ "$i" -eq | + | if [ "$i" -eq 2 ]; then |
| − | python3 -m http.server | + | python3 -m http.server 8000 >/tmp/web.log 2>&1 & |
echo $! > "$PIDFILE" | echo $! > "$PIDFILE" | ||
echo "Webserver gestartet" | echo "Webserver gestartet" | ||
break | break | ||
fi | fi | ||
| + | sleep 1 | ||
done | done | ||
;; | ;; | ||
| Zeile 103: | Zeile 132: | ||
if [ ! -f "$PIDFILE" ]; then | if [ ! -f "$PIDFILE" ]; then | ||
echo "Kein Server gestartet" | echo "Kein Server gestartet" | ||
| − | exit | + | exit 2 |
fi | fi | ||
PID=$(cat "$PIDFILE") | PID=$(cat "$PIDFILE") | ||
| + | COUNT=0 | ||
| − | |||
while kill "$PID" >/dev/null 2>&1; do | while kill "$PID" >/dev/null 2>&1; do | ||
COUNT=$((COUNT+1)) | COUNT=$((COUNT+1)) | ||
| Zeile 124: | Zeile 153: | ||
status) | status) | ||
if [ ! -f "$PIDFILE" ]; then | if [ ! -f "$PIDFILE" ]; then | ||
| − | echo " | + | echo "nicht aktiv" |
exit 0 | exit 0 | ||
fi | fi | ||
| + | |||
PID=$(cat "$PIDFILE") | PID=$(cat "$PIDFILE") | ||
| + | |||
if kill -0 "$PID" >/dev/null 2>&1; then | if kill -0 "$PID" >/dev/null 2>&1; then | ||
echo "läuft" | echo "läuft" | ||
| Zeile 135: | Zeile 166: | ||
;; | ;; | ||
| − | + | *) | |
| + | echo "Unbekannter Befehl" | ||
| + | exit 4 | ||
| + | ;; | ||
| + | esac | ||
| + | </pre> | ||
| + | ---> | ||
| + | |||
| + | echo "python3 nicht gefunden" | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | case "$CMD" in | ||
| + | start) | ||
| + | if [ -f "$PIDFILE" ]; then | ||
| + | echo "Server läuft bereits" | ||
| + | exit 3 | ||
| + | fi | ||
| + | |||
| + | for i in 1 2 3; do | ||
| + | echo "Starte... Versuch $i" | ||
| + | if [ "$i" -eq 2 ]; then | ||
| + | python3 -m http.server 8000 >/tmp/web.log 2>&1 & | ||
| + | echo $! > "$PIDFILE" | ||
| + | echo "Webserver gestartet" | ||
| + | break | ||
| + | fi | ||
| + | sleep 1 | ||
| + | done | ||
| + | ;; | ||
| + | |||
| + | stop) | ||
if [ ! -f "$PIDFILE" ]; then | if [ ! -f "$PIDFILE" ]; then | ||
| − | echo " | + | echo "Kein Server gestartet" |
| − | exit | + | exit 2 |
fi | fi | ||
| + | |||
PID=$(cat "$PIDFILE") | PID=$(cat "$PIDFILE") | ||
| + | COUNT=0 | ||
| − | + | while kill "$PID" >/dev/null 2>&1; do | |
| − | echo " | + | COUNT=$((COUNT+1)) |
| − | sleep | + | if [ $((COUNT % 2)) -eq 0 ]; then |
| + | continue | ||
| + | fi | ||
| + | echo "Beende Prozess..." | ||
| + | sleep 1 | ||
done | done | ||
| − | echo "Prozess | + | rm -f "$PIDFILE" |
| + | echo "gestoppt" | ||
| + | ;; | ||
| + | |||
| + | status) | ||
| + | if [ ! -f "$PIDFILE" ]; then | ||
| + | echo "nicht aktiv" | ||
| + | exit 0 | ||
| + | fi | ||
| + | |||
| + | PID=$(cat "$PIDFILE") | ||
| + | |||
| + | if kill -0 "$PID" >/dev/null 2>&1; then | ||
| + | echo "läuft" | ||
| + | else | ||
| + | echo "PID existiert, aber Prozess tot" | ||
| + | fi | ||
;; | ;; | ||
*) | *) | ||
| − | echo " | + | echo "Unbekannter Befehl" |
| − | exit | + | exit 4 |
;; | ;; | ||
esac | esac | ||
</pre> | </pre> | ||
| + | ---> | ||
Aktuelle Version vom 25. November 2025, 16:02 Uhr
Übungsaufgabe: Einfacher Webserver-Controller (webctl.sh)
- In dieser Aufgabe soll ein kleines Bash-Skript einen Python-Webserver starten, stoppen und überwachen.
- Dabei sollen grundlegende Kontrollstrukturen (case, if, for, while, until, break, continue, exit) verwendet werden.
Aufgabenstellung
- Erstellen Sie ein Skript webctl.sh mit folgenden Befehlen:
- start
- stop
- status
- help
Anforderungen
start
- Prüfen Sie mit if, ob python3 installiert ist, sonst exit 1.
- Starten Sie den Webserver mit: python3 -m http.server 8000 &
- Speichern Sie die PID in /tmp/web.pid.
- Verwenden Sie eine kleine for-Schleife (3 Versuche), die beim zweiten Versuch mit break abbricht.
stop
- Wenn die PID-Datei fehlt → Fehlermeldung und exit 2.
- Mit einer while-Schleife kill auf die PID ausführen, solange der Prozess noch läuft.
- Jeden zweiten Schleifendurchlauf mit continue überspringen.
- Wenn der Prozess beendet ist → PID-Datei löschen.
status
- Wenn PID-Datei vorhanden → prüfen, ob der Prozess läuft.
- Wenn ja: "läuft" ausgeben.
- Wenn nein: "nicht aktiv".
help
- Liste der Befehle anzeigen.
Zusatz
- Jeder Fehlerfall soll mit einem passenden exit-Code beendet werden.
echo "python3 nicht gefunden" exit 1
fi
case "$CMD" in
start)
if [ -f "$PIDFILE" ]; then
echo "Server läuft bereits"
exit 3
fi
for i in 1 2 3; do
echo "Starte... Versuch $i"
if [ "$i" -eq 2 ]; then
python3 -m http.server 8000 >/tmp/web.log 2>&1 &
echo $! > "$PIDFILE"
echo "Webserver gestartet"
break
fi
sleep 1
done
;;
stop)
if [ ! -f "$PIDFILE" ]; then
echo "Kein Server gestartet"
exit 2
fi
PID=$(cat "$PIDFILE") COUNT=0
while kill "$PID" >/dev/null 2>&1; do
COUNT=$((COUNT+1))
if [ $((COUNT % 2)) -eq 0 ]; then
continue
fi
echo "Beende Prozess..."
sleep 1
done
rm -f "$PIDFILE" echo "gestoppt" ;;
status)
if [ ! -f "$PIDFILE" ]; then
echo "nicht aktiv"
exit 0
fi
PID=$(cat "$PIDFILE")
if kill -0 "$PID" >/dev/null 2>&1; then
echo "läuft"
else
echo "PID existiert, aber Prozess tot"
fi
;;
*) echo "Unbekannter Befehl" exit 4 ;;
esac
--->