Bash Filedeskriptoren: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 66: | Zeile 66: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | = | + | = Aufgabe = |
| − | * Schreiben Sie ein Dummy Programm, das jede Sekunde zufällig entweder ''Log'', ''Warning'' oder ''Error'' | + | * Schreiben Sie ein Dummy Programm, das jede Sekunde zufällig entweder ''Log'', ''Warning'' oder ''Error'' ausgibt |
* Benutzen Sie dafür die Umgebungsvariable $RANDOM: | * Benutzen Sie dafür die Umgebungsvariable $RANDOM: | ||
** Wenn $RANDOM kleiner ist als 15000, dann soll es eine Log-Nachricht auf Kanal 4 sein. | ** Wenn $RANDOM kleiner ist als 15000, dann soll es eine Log-Nachricht auf Kanal 4 sein. | ||
| Zeile 74: | Zeile 74: | ||
** Sonst soll es eine Fehler-Nachricht auf STDERR sein. | ** Sonst soll es eine Fehler-Nachricht auf STDERR sein. | ||
* Um die Nachrichten voneinander zu unterscheiden, soll das Datum und die Uhrzeit daneben stehen | * Um die Nachrichten voneinander zu unterscheiden, soll das Datum und die Uhrzeit daneben stehen | ||
| − | |||
Version vom 31. Mai 2023, 08:55 Uhr
Schreibenden Deskriptor
- anlegen
- exec 5> /tmp/five
- rein schreiben
- echo eins >&5
- echo zwei >&5
- echo drei >&5
- ausgeben
- cat /tmp/five
- aufheben
- exec 5>&-
- führt zu Fehler
- echo vier >&5
Lesender Deskriptor
- anlegen
- exec 7< /etc/hosts
- auslesen
- cat <&7
- geht nur einmal
- cat <&7
Gleichzeitiges Lesen aus verschiedenen Dateien
#!/bin/bash
exec 3< /etc/passwd
exec 4< /etc/shadow
while true
do
read var3 <&3
read var4 <&4
echo passwd $var3
echo shadow $var4
test -z $var4 && break
done
Gleichzeitiges Lesen aus Datei und Standardeingabe
#!/bin/bash
exec 3< $1
while read line <&3
do
echo $line
printf "Eine weitere Zeile einlesen? [j/n] : "
read REPLY
test "$REPLY" = "n" && break
done
Aufgabe
- Schreiben Sie ein Dummy Programm, das jede Sekunde zufällig entweder Log, Warning oder Error ausgibt
- Benutzen Sie dafür die Umgebungsvariable $RANDOM:
- Wenn $RANDOM kleiner ist als 15000, dann soll es eine Log-Nachricht auf Kanal 4 sein.
- Wenn $RANDOM kleiner ist als 25000, dann soll es eine Warn-Nachricht auf Kanal 3 sein.
- Sonst soll es eine Fehler-Nachricht auf STDERR sein.
- Um die Nachrichten voneinander zu unterscheiden, soll das Datum und die Uhrzeit daneben stehen