Stefan.Weigel@SBA-MG.nrw.de wrote:
echo -n "Bitte GID eingeben : " read wert gefunden=0 cat /etc/group | while read zeile ^^^^^
Die mit Pipes verbundenen Prozesse werden von der bash jeweils in einzelne Prozesse verlagert. Zitat aus `man bash`: Each command in a pipeline is executed as a separate pro cess (i.e., in a subshell). Die while-Schleife wird also in einer Subshell, einem Kindprozess Deines Skripts ausgefuehrt.
IFS=":" set $zeile if test "$3" -eq $wert then echo "Die GID $wert ist die Gruppe $1" gefunden=1
Und hier wird die Variable im Kindprozess veraendert.
fi done
Hier endet die Subshell mit der while-Schleife (das zweite Kommando in der Pipeline).
echo "$gefunden"
Und das steht wieder in der urspruenglichen Shell. Aenderungen im Kindprozess koennen sich darauf nicht auswirken.
Die Variable "gefunden", der ich bei erfolgreicher Suche den Wert 1 zuordnen will bleibt immer null! Wo liegt mein Fehler ?
Tja, die Erklaerung hast Du jetzt. Zugegeben, man sieht den Fehler nicht auf den ersten Blick -- ich habe auch schon mal eine Weile ueber sowas gegruebelt... Eine moegliche Loesung mit einem boesen awk-Skript: echo -n "Bitte GID eingeben : " read wert gefunden=0 if awk -F : -v "gid=$wert" ' $3 == gid { printf "Die GID %d ist die Gruppe %s\n", gid, $1; found = 1; } END { exit 1 - found; } ' /etc/group; then gefunden=1 fi Eilert -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Eilert Brinkmann -- Universitaet Bremen -- FB 3, Informatik eilert@informatik.uni-bremen.de - eilert@tzi.org - eilert@linuxfreak.com http://www.informatik.uni-bremen.de/~eilert/ --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com