aktuelle.kurse/m122/LB1/bash-pruefung-c.md

223 lines
6.4 KiB
Markdown
Raw Normal View History

2021-09-06 09:48:50 +02:00
# M122 - Bash - Prüfung 2 Serie c - Nachprüfung
**Erlaubte Hilfsmittel :**
- Alle Hilfsmittel ausser Netzwerkkommunikation (**LAN-Kabel
entfernen!**)
**Generell nicht erlaubt ist:**
- Abschreiben von der Nachbarprüfung oder Weitergeben von
Prüfungen/Prüfungsresultaten innerhalb der Klasse. Kommunikation
über Handy oder Computernetzwerk.
Jeglicher Verstoss gegen diese Regeln führt umgehend zum Ausschluss aus
2021-09-06 11:29:27 +02:00
der Prüfung und der Note 1.
2021-09-06 16:38:53 +02:00
Name: `___________________________` Klasse: `__________` Datum: `______________`
2021-09-06 11:29:27 +02:00
|Aufgabe | max. Punkte | erreichte Punkte |
2021-09-06 16:38:53 +02:00
|---- |---- | ---- |
|1a | 1 |
|1b | 1 |
|1c | 1 |
|1d | 1 |
|1e | 1 |
|2a | 2 |
|2b | 2 |
|2c | 2 |
|2d | 2 |
|3a | 4.5 |
|3b | 5 |
|---- |---- |----
2021-09-06 11:29:27 +02:00
|Total | 22.5 |
2021-09-06 11:17:40 +02:00
## Teil 1 - Kurzaufgaben
**Aufgabe - 1a (1 Punkt)** - grep - Gegeben ist folgendes Kommando:
2021-09-06 09:48:50 +02:00
``` {.bash frame="none" mathescape=""}
cat /etc/passwd | grep root | cut -d ':' -f 1
```
2021-09-06 11:17:40 +02:00
Erklären sie, was dieses Kommando genau macht:
2021-09-06 09:48:50 +02:00
Antwort:
2021-09-06 16:38:53 +02:00
`_________________________________________________________________________________ __________________________________________________________________________________ __________________________________________________________________________________`
2021-09-06 10:44:40 +02:00
2021-09-06 16:38:53 +02:00
**Aufgabe - 1b (1 Punkt)** - Verzeichnisse wechseln
2021-09-06 09:48:50 +02:00
Angenommen, sie befinden sich auf Ihre Linuxsystem unter `/usr/bin/`,
geben sie die **relative** und die **absolute** Pfadangabe an, um in das
2021-09-06 16:38:53 +02:00
Verzeichnis `/home/user1/` zu wechseln:
2021-09-06 09:48:50 +02:00
Antwort:
2021-09-06 16:38:53 +02:00
`________________________________________________________________________________ _________________________________________________________________________________`
2021-09-06 10:44:40 +02:00
2021-09-06 11:17:40 +02:00
**Aufgabe - 1c (1 Punkt)** - Cronjob - Sie wollen eines Ihre Bashskripte mit crontab automatisieren,
2021-09-06 09:48:50 +02:00
dazu haben sie einen cronjob eingerichtet welcher nach nachfolgendem
Muster ausgelöst wird:
``` {.bash frame="none" mathescape=""}
30 4 * * 5
```
Wann wird das Skript jeweils ausgeführt?\
\
Antwort:
2021-09-06 16:38:53 +02:00
`________________________________________________________________________________ _________________________________________________________________________________ __________________________________________________________________________________`
2021-09-06 10:37:36 +02:00
2021-09-06 11:17:40 +02:00
**Aufgabe - 1d (+1 Punkt pro richtige, -1 Punkt pro fehlende/falsche Antwort)** - Welches Dateirecht muss auf einer Datei gesetzt werden, damit in diese
2021-09-06 16:38:53 +02:00
geschrieben werden kann? (einkreisen)
2021-09-06 09:48:50 +02:00
2021-09-06 11:26:17 +02:00
- `0`
- `x`
- `w`
- `t`
- `s`
2021-09-06 09:48:50 +02:00
2021-09-06 16:38:53 +02:00
**Aufgabe - 1e (1 Punkt)** - Wildcards - Sie führen folgendes Kommando
2021-09-06 09:48:50 +02:00
aus:
``` {.bash frame="none" mathescape=""}
touch {backuped{1,2},restored{1,2}}.zip
```
2021-09-06 16:38:53 +02:00
Erklären sie, was das Kommando genau macht:
2021-09-06 10:40:20 +02:00
2021-09-06 09:48:50 +02:00
Antwort:
2021-09-06 16:38:53 +02:00
`___________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________`\
2021-09-06 10:40:20 +02:00
2021-09-06 10:29:33 +02:00
2021-09-06 11:26:17 +02:00
## Teil 2 - Codestücke
**Aufgabe - 2a (2 Punkte)** - Backup Skript
2021-09-06 10:29:33 +02:00
2021-09-06 09:48:50 +02:00
Nachfolgend sehen sie ein unvollständiges Backupskript. Die wichtigsten
Informationen, um mit `tar` ein Backup durchzuführen, werden in den
Variablen `quelle`, `ziel` und `outputFile` zwischengespeichert.
Vervollständigen sie das Skript so, dass ein Backup vom Ordner `home`
gemacht wird und zB. in der Datei `/var/backups/home-20151214.tgz`
abgelegt wird. Benutzen sie dazu die bereits definierten Variablen.
``` {.bash frame="none" mathescape=""}
#!/bin/bash
outputFile=home-$(date +%Y%m%d).tgz
quelle="/home/"
ziel="/var/backups/"
tar -cZf ________________ __________
```
2021-09-06 16:38:53 +02:00
**Aufgabe - 2b (2 Punkte)** - for in
2021-09-06 09:48:50 +02:00
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollten das Skript
so ergänzen, dass es den Inhalt des Verzeichnisses `/home/` ausgibt und
zwar unter der Verwendung der abgebildeten `for in` Schleife.
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
#!/bin/bash
for i in ______________ ; do
echo $i
done
```
2021-09-06 11:26:17 +02:00
**Aufgabe - 2c (2 Punkte)** - If - else
2021-09-06 09:48:50 +02:00
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollen das Skript
nun so ergänzen (Zeilen 3 und 5), dass dieses, falls das 1. Argument den
Wert `keyw0rd` hat, den Text *sie dürfen passieren* ausgibt und falls
nicht den Text *nicht erlaubt!*.
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
#!/bin/bash
if [ $1 = "keyw0rd" ]; then
_____________________
else
_____________________
fi
```
2021-09-06 11:26:17 +02:00
**Aufgabe - 2d (2 Punkte)** - while
2021-09-06 09:48:50 +02:00
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollen das Skript
so ergänzen, dass die Schleife solange läuft, wie `zaehler` kleiner als
8 ist (Zeile 3) und der `zaehler` zum Schluss jedes Schleifendurchlaufs
um 2 erhöht wird (Zeile 5).
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
#!/bin/bash
zaehler=2
while [ $zaehler _________ ]; do
echo der zaehler ist $zaehler
____________
done
```
2021-09-06 11:26:17 +02:00
## Teil 3 - Programmieraufgaben
**Aufgabe - 3a (4.5 Punkte, 0.75 Punkt pro Zeile)** - Rechnerskript
2021-09-06 10:29:33 +02:00
2021-09-06 09:48:50 +02:00
Im nachfolgenden sehen sie ein Taschenrechnerskript, welches zwei Zahlen
und eine Operation einliest und dann die beiden Zahlen mit dieser
Operation verrechnet (zB. addiert) und ausgibt:
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
echo "bitte gebe eine Nummer ein"
read n1
echo "bitte wähle eine Operation"
echo "1. addieren"
echo "2. subtrahieren"
echo "3. dividieren"
echo "4. multiplizieren"
read opr
echo "bitte gebe eine zweite Nummer ein"
read n2
if [ $opr = "1" ]
then
echo $((n1+n2))
___________
___________
________________
elif [ $opr = "3" ]
then
echo $((n1/n2))
___________
___________
________________
fi
```
Der Code der Operationen Subtraktion und Multiplikation fehlt. Ergänzen
sie den Code an den hervorgehobenen Stellen so, dass auch die
2021-09-06 11:26:17 +02:00
Subtraktion und Multiplikation funktionieren.
2021-09-06 10:29:33 +02:00
2021-09-06 11:26:17 +02:00
**Aufgabe - 3b (5 Punkte)** - resolv.conf
2021-09-07 09:40:46 +02:00
In einer Datei `/etc/resolv.conf` kommen Domänennamen der lokalen Domains
2021-09-06 09:48:50 +02:00
vor, zB.:
2021-09-07 09:40:46 +02:00
```
2021-09-06 09:48:50 +02:00
search example.com
nameserver 10.0.1.6
nameserver 10.0.1.7
2021-09-07 09:40:46 +02:00
```
2021-09-06 09:48:50 +02:00
Schreiben sie ein kleines Skript, welches alle Domänennamen findet und
ausgibt. Mit dem obigen Inhalt sollte Ihr Skript also folgende Ausgabe
erzeugen:
2021-09-07 09:40:46 +02:00
``` example.com
```
2021-09-06 09:48:50 +02:00
Verwenden sie dazu `cat`, `grep` und `cut`.