Bash Filedeskriptoren: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 66: Zeile 66:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
= Aufgaben =
+
= Aufgabe =
  
* Schreiben Sie ein Dummy Programm, das jede Sekunde zufällig entweder ''Log'', ''Warning'' oder ''Error'' auf STDOUT ausgibt
+
* 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