![](https://seccdn.libravatar.org/avatar/4e9a8c604df1eb89f2b4a2cf588cc40b.jpg?s=120&d=mm&r=g)
Guenther Behrendsen wrote:
Hallo erstmal.
Für die eingefleischten Linuxianer hier wird das sicherlich eine Lachnummer sein, ich komme da aber momentan nicht weiter. Deshalb frag ich hier mal an.
Gegeben sei eine Liste mit e-Mail Empfängern im reinen ASCII Format, jede Zeile ein Empfänger. Desweiteren eine oder mehrere Dateien, die uuencoded an die Liste der Empfänger verschickt werden sollen. Die Empfängerliste heisst sinnigerweise 'empfaenger.txt' und liegt im selben Verzeichnis, in dem auch die zu versendenden Dateien sind.
Den Teil mit dem uuencoden und verschicken an _einen_ Empfänger hab' ich ja schon fertig. ;-) Aber das zeilenweise Abarbeiten der Empfängerliste, da komm ich nicht weiter. Wie stellt man das am besten an?
Das Problem scheint 'read' zu sein, der aus irgendwelchen Gründen nicht so recht aus der Datei lesen will. Der 'echo' Befehl zum debuggen meldet mir immer nur 'empty bekommt <Dateiname>'. Also wird $ADDRESSE zwar ausgelesen, erhält aber nie den Wert, den 'read' ihr eigentlich hätte zuweisen sollen.
Ich schick hier mal meinen bisherigen Teil des Scriptes:
-----Begin----- #!/bin/sh # Verteiler - Versenden der Files aus einem Verzeichis # # Wichtige Parameter INBOUND="/tmp/distri/vertreter" SUBJECT="Automatische_Mitteilung" LISTE="./empfaenger.txt" ADDRESSE="empty"
# Verwendete Programme UUENCODE="/usr/bin/uuencode" MAIL="/usr/bin/mail" LS="/bin/ls" # vvv--- In der Endfassung durch "/bin/rm" ersetzen!! RM="/bin/ls" TEST="/usr/bin/test"
# Der Code cd $INBOUND while $TEST $ADDRESSE != EOF; do read $LISTE; if test $ADDRESSE = EOF ; then exit; fi for i in $($LS -I $LISTE); do echo "$ADDRESSE bekommt $i"; $UUENCODE $i $i | $MAIL -s $SUBJECT $ADDRESSE ; $RM $i; done done -----End-----
hm, so ganz steig ich da nicht durch, was ist EOF soll das eine Variable oder ein text sein? Der Einfachkeit halber mal das Grundgerüst für read: while read p1 p2 do echo "Param1: $p1 , Param2: $p2" done < deine_datei So, read kann also auch mehrere Parameter trennen. Die Trennzeichen werden in der Shellvariablen IFS festgelegt. Das Dateiende erkennt read automatisch. Noch'n Tip: Du solltest (musst) alle Variablen die Text enthalten bei der Übergabe an ein Commando, quoten. Dein Code test $ADDRESSE = EOF geht in die Hose wenn $ADDRESSE leer ist oder ein Leerzeichen enthält. korrekt wäre: test "X$ADDRESSE" = XEOF oder besser test "X$ADDRESSE" = "XEOF" Das X verhindert, dass ADDRESSE leer ist, die Quotes bewirken, dass test ADDRESSE als _ein_ Parameter behandelt wird. Das gilt für Textvariablen. Zahlen checkt man am besten, weil übersichtlicher und kompatibler via test 1234 -lt 5678 -lt = lower than -gt = greater than -eq = equal -ne = not equal usw. siehe man test Und das obligatorische man bash, man read, usw... darf natürlich nicht fehlen ;) so long... bernd