A: Bash-Scripting 01

Aufgabe A

Erstelle als "normaler" Benutzer (also nicht als root) ein "Hello World"-Bash-Script und führe es aus!

Aufgabe B

Auf deinem Debian-System sollte es drei "normale" Benutzer geben. Nennen wir Sie "A", "B" und "C". Lege falls nötig solche Benutzer neu an.

Benutzer A soll der Besitzer des "Hello World"-Skripts aus der vorangegangenen Aufgabe sein. Er kann das Skript verändern und ausführen.

Benutzer B soll zusammen mit Benutzer A in einer Gruppe sein. Eine solche Gruppe kannst DU falls nötig neu definieren. Benutzer B kann nun das "Hello World"-Skript ausführen. Er kann sich auch den Quelltext ansehen, aber er darf das Skript nicht verändern können.

Benutzer C darf das "Hello World"-Skript weder ausführen, noch ansehen oder verändern können.

Aufgabe C

Welche Aufgabe führt folgendes Shellskript aus? (Bitte für jede Zeile notieren!)

#!/bin/bash
if [ "$1" = "fast" ]; then
    sleep 1
else
    sleep 20
fi

Aufgabe D

Schreibe ein Shellskript, welches das aktuelle Datum und die aktuelle Uhrzeit in die Datei /var/log/info.log schreibt. Wenn du das Skript mehrfach ausführst, dann sollen die Informationen jeweils an das Ende der Log-Datei angehängt werden.

Erweitere dein Skript derart, dass es einen optionalen Übergabeparameter zulässt. Falls der Übergabeparameter nicht angegeben wird, so wird auch nur Datum und Uhrzeit gemeinsam in eine Zeile der Logdatei geschrieben (--> an die existierende Logdatei angehängt). Andernfalls, es wurde also ein Parameter übergeben, wird dieser hinter Datum und Uhrzeit in dieselbe Zeile der Logdatei geschrieben (--> angehängt).

Aufgabe E

Sorge dafür, dass an die Datei /var/log/info.log eine Zeile mit Datum, Uhrzeit und dem Text „ROOT-Login“ immer dann angehängt wird, wenn sich der User root erfolgreich am System angemeldet hat. Nutzen Sie dafür einen automatisierten Aufruf Ihres Skripts aus der vorangegangenen Aufgabe. Es gibt verschiedene Möglichkeiten, wie der Aufruf des Skripts automatisiert werden kann. Finde mindestens einen Weg!

Aufgabe F

Mit Hilfe sogenannter Cron-Jobs kannst du viele sinnvolle Dinge erledigen. Mache dich mit den Möglichkeiten vertraut!

Erstelle einen Cron-Job, der einmal pro Minute dein Skript aus Aufgabe B ausführt. Erläuter die hierfür einzustellenden Parameter. Beobachte anschließend die Ausgabe-Datei /var/log/info.log mit Hilfe des tail-Kommandos für ein paar Minuten.

Was musst du verändern, wenn das Skript nicht mehr jede Minute, sondern nur noch alle 3 Minuten ausgefüht werden soll?

Und wie lauten die Einstellungen, wenn das Skript zu "normalen Arbeitszeiten" (montags bis freitags, zwischen 08.00 und 17.00 Uhr), jeweils um 8 Minuten nach jeder vollen Stunde ausgeführt werden soll?

Aufgabe G

Schreibe ein Shellskript, das beim Aufruf die Frage "Wollen Sie ein Kommando eingeben? (j/n)" ausgibt.
Das Skript fragt den Aufrufer solange, bis er korrekt mit j bzw. J oder mit n bzw. N antwortet.
Bei Antwort n oder N soll der Satz "Skript wird beendet" ausgegeben und das Skript beendet werden.
Bei Antwort j oder J fordert das Skript auf "Bitte auszuführendes Kommando eingeben:". Anschließend wird eine Eingabe des Benutzers gelesen, und dann als Kommando interpretiert und ausgeführt. Weiter geht es mit der Frage vom Anfang: "Wollen Sie ein Kommando eingeben? (j/n)"

Aufgabe H

Erstelle ein Shellskript, das den Satz "Sie stehen aktuell im Verzeichnis xyz" ausgibt (statt xyz soll der Name des aktuellen Verzeichnisses ausgegeben werden), und das weiterhin prüft, ob beim Skriptaufruf übergebene Argumente Namen von Verzeichnissen sind.
Die übergebenen Verzeichnisse samt aller Unterverzeichnissen und darin enthaltenen Dateien sollen ohne weitere Rückfrage gelöscht werden. Eine Meldung informiert anschließend darüber, welches Verzeichnis gelöscht wurde.

Vorsicht ! Risiko!
Bei Fehlern im Skript oder in der Handhabung kannst du ggf. alle Daten der aktiven Partition deiner VM löschen! Aber du hast doch sicher ein Backup deiner VM, oder? (No risk – No fun ;-)

Aufgabe I

Vergleiche deine in den vorangegangenen Aufgaben programmierten Skripte mit denen von Mitstudierenden. Gemäß dem Unix-Grundsatz "Klein ist schön" versucht gemeinsam eure Skripte - bei gleicher Funktionalität - kleiner, kompakter und übersichtlicher zu gestalten. Verbessere deinen Quelltext und diskutiert untereinander die Möglichkeiten!