aktuelle.kurse/m122/LB1/bash-pruefung-a.md
Harald Mueller 1d47fb781d muh
2021-09-06 10:29:33 +02:00

221 lines
6.3 KiB
Markdown

# M122 - Bash - Prüfung 2 Serie a
**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
der Prüfung und der Note 1.\
Name: `__________________________` Klasse: `_____________` Datum:
`_____________`\
--------- ------------- ------------------
Aufgabe max. Punkte erreichte Punkte
1a 1
1b 1
1c 1
1d 1
1e 1
2a 2
2b 2
2c 2
2d 2
3a 5
3b 3
Total 21
--------- ------------- ------------------
\
Cronjob - Sie wollen eines Ihre Bashskripte mit crontab automatisieren,
dazu haben sie einen cronjob eingerichtet welcher nach nachfolgendem
Muster ausgelöst wird:
``` {.bash frame="none" mathescape=""}
0 4 * * 1
```
Wann wird das Skript jeweils ausgeführt?\
\
Antwort:
`__________________________________________________________________________________________ _____________________________________________________________________________________________________ _____________________________________________________________________________________________________`\
\
**Aufgabe - 1b (1 Punkt)** Wildcards - Sie führen folgendes Kommando
aus:
``` {.bash frame="none" mathescape=""}
touch {a..c}file
```
Erklären sie, was das Kommando genau macht:\
\
Antwort:
`__________________________________________________________________________________________ ____________________________________________________________________________________________________ ____________________________________________________________________________________________________`\
\
grep - Gegeben ist folgendes Kommando:
``` {.bash frame="none" mathescape=""}
cat /etc/passwd | grep -v root
```
Erklären sie, was dieses Kommando genau macht (berücksichtigen sie auch
die Option `-v`):\
Antwort:
`__________________________________________________________________________________________ ____________________________________________________________________________________________________ ____________________________________________________________________________________________________`\
- Verzeichnisse wechseln\
Angenommen, sie befinden sich auf Ihre Linuxsystem unter `/root/`, geben
sie die **realtive** und die **absolute** Pfadangabe an, um in das
Verzeichnis `/tmp` zu wechseln:\
\
Antwort:
`________________________________________________________________________________________ ___________________________________________________________________________________________________`\
- Welches Dateirecht muss zusätzlich auf einer Skriptdatei gesetzt
werden, damit diese ausgeführt werden kann?
- `0`
- `x`
- `w`
- `t`
- `s`
- If - else\
\
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 `passw0rd` hat, den Text *Passwort korrekt, Zutritt erlaubt*
ausgibt und falls nicht den Text *Zutritt verweigert!*.
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
#!/bin/bash
if [ $1 = "passw0rd" ]; then
_____________________
else
_____________________
fi
```
\- for in\
\
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollten das Skript
so ergänzen, dass es den Inhalt des Verzeichnisses `/etc/` 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
```
\- while\
\
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollen das Skript
so ergänzen, dass die Schleife solange läuft, wie `zahler` grösser als
10 ist (Zeile 3) und der `zaehler` zum Schluss jedes Schleifendurchlaufs
um 1 reduziert wird (Zeile 5).
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
#!/bin/bash
zaehler=20
while [ $zaehler _________ ]; do
echo der zaehler ist $zaehler
____________
done
```
\- Backup Skript\
\
Nachfolgend sehen sie ein unvollständiges Backupskript. Die wichtigsten
Informationen, um mit `tar` ein Backup durchzuführen, werden in den
Variablen `source`, `target` 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.
``` {.powershell frame="none" mathescape=""}
#!/bin/bash
source="/home/"
target="/var/backups/"
outputFile=home-$(date +%Y%m%d).tgz
tar -cZf ________________ __________
```
- IP-Adressen von Nameservern\
\
In der Datei `/etc/resolv.conf` sind die IPs der von Ihrem Linuxsystem
verwendeten Nameserver eingetragen. Der Inhalt dieser Datei kann zB. so
aussehen:
search example.com
nameserver 10.0.3.4
nameserver 10.0.3.5
Schreiben sie ein kleines Skript, welches alle IP's der Nameserver
ausgibt. Mit dem obigen Beispiel sollte Ihr Skript also folgende Ausgabe
erzeugen:
10.0.3.4
10.0.3.5
Verwenden sie dazu `cat`, `grep` und `cut`.\
- Rechnerskript\
\
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 "Geben sie die erste Nummer ein:"
read a
echo "Geben sie die zweite Nummer ein:"
read b
echo "Geben sie die gewünschte Opertaion +, - , / oder x ein"
read opr
if [ $opr = "+" ]
then
op=`expr $a + $b`
echo "$op"
_______________
_______________
_______________
_______________
elif [ $opr = "/" ]
then
op=`expr $a / $b`
echo "$op"
elif [ $opr = "x" ]
then
op=`expr $a \* $b`
echo "$op"
fi
```
Der Code einer Operation fehlt (Subtraktion). Ergänzen sie den Code an
der hervorgehobenen Stelle so, dass auch die Subtraktion funktioniert.