Variablen aus Datei lesen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
delumax
Beiträge: 63
Registriert: 14.06.2004 08:25:51

Variablen aus Datei lesen

Beitrag von delumax » 23.06.2004 16:26:56

Ich habe hier 3 Dateien, in einer steht der Benutzername, in einer das PW und in der dritten die Mailadresse. Ich möchte nun die drei Dateien auslesen und per "echo" eine fetchmailrc erzeugen.

Also in etwa so:

Code: Alles auswählen

echo "poll pop3server protocol POP3 user $datei1 password $datei2 is $datei3 antispam -1 smtphost smtpserver" >> .fetchmailrc
Mir ist nur nicht klar wie ich die Dateien als Source nehme usw.
Mit anderen Worten: nur der Rest vom Script fehlt mir noch ;o) ... Danke!

Benutzeravatar
feltel
Webmaster
Beiträge: 10476
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 23.06.2004 16:31:48

Code: Alles auswählen

$datei1=`cat /hier/liegt/datei1`
$datei2=`cat /hier/liegt/datei2`
$datei3=`cat /hier/liegt/datei3`

echo "poll pop3server protocol POP3 user $datei1 password $datei2 is $datei3 antispam -1 smtphost smtpserver" >> .fetchmailrc
sollte helfen :-)

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 23.06.2004 18:54:21

feltel hat geschrieben:

Code: Alles auswählen

$datei1=`cat /hier/liegt/datei1`
...
sollte helfen :-)
Naja, wenn man hier das $-Zeichen weglässt, hätte man Chancen. :wink:
Gruß
ernohl

Benutzeravatar
feltel
Webmaster
Beiträge: 10476
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 23.06.2004 18:57:40

Da ist irgenwie was dran 8O :P

delumax
Beiträge: 63
Registriert: 14.06.2004 08:25:51

Beitrag von delumax » 24.06.2004 09:25:56

Danke erstmal. Allerdings schreibt cat erwartungsgemäss sämtlichen Inhalt der Dateien auf einmal in die Variable und am ende wird nur ein echo ausgeführt indem dann sämtliche User usw. enthalten sind.

Es müsste aber eher so laufen das das Script immer jeweils eine Zeile in den Dateien abarbeitet und dann das echo durchführt. Sprich 1. Zeile in den Dateien auslesen dann ein echo, 2. Zeile auslesen usw..

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 24.06.2004 10:21:00

Ach so - das stand aber im Original-Posting nicht :roll:

Dann halt was in die Richtung:

Code: Alles auswählen

for ((i = 1; i < $(cat datei1 | wc -l); i++)); do
  datei1=`sed -n "$i p" < /hier/liegt/datei1`
  datei2=`sed -n "$i p" < /hier/liegt/datei2`
  datei3=`sed -n "$i p" < /hier/liegt/datei3 | head`

  echo "poll pop3server protocol POP3 user $datei1 password $datei2 is $datei3 antispam -1 smtphost smtpserver" >> .fetchmailrc
done
Ungetestet wie blöd. ;)
Und verlässt sich darauf das in allen Dateien gleich viele Zeilen sind.

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

delumax
Beiträge: 63
Registriert: 14.06.2004 08:25:51

Beitrag von delumax » 24.06.2004 11:10:41

Ach so - das stand aber im Original-Posting nicht
Stimmt, hätte ich wohl erwähnen sollen. Wobei wer möchte zum anlegen eines einzelnen Users für Fetchmail ein Script einsetzen ;o) ...

Ich glaube das ist genau das was ich suche. Leider bekomme ich aber noch folgende Fehlermeldung: ((: i < : syntax error: operand expected (error token is " ")

Es wird dringend Zeit das ich mir mal ein gutes Buch in der Richtung kaufe! Danke!

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 24.06.2004 13:16:15

Folgendes würde auch gehen ('^' ggf. durch ein Zeichen ersetzen, dass nirgendwo in den Dateien auftaucht)

Code: Alles auswählen

#!/bin/sh
for LINE in $(paste -d '^' file1 file2 file3); do
  USER=$(echo $LINE|cut -d '^' -f1)
  PASS=$(echo $LINE|cut -d '^' -f2)
  HERE=$(echo $LINE|cut -d '^' -f3)

  echo "poll ... " >> .fetchmailrc
done
Und wieder einmal sieht man, warum Larry Wall Perl geschrieben hat ;)

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 24.06.2004 14:08:06

Joghurt hat geschrieben:Und wieder einmal sieht man, warum Larry Wall Perl geschrieben hat ;)
Ich nicht. Woran sieht man :?:
Gruß
ernohl

delumax
Beiträge: 63
Registriert: 14.06.2004 08:25:51

Beitrag von delumax » 24.06.2004 15:19:11

Und wieder der Joguhrt ;o) ... Perfekt! Danke!

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 24.06.2004 16:25:08

ernohl hat geschrieben:Ich nicht. Woran sieht man :?:
Nun, pro Zeile werden 3 (oder sogar 6) Prozesse aufgerufen, nur um die vorher zusammengesetzte Zeile wieder auseinanderzupfriemeln. Ganz zu schweigen von der Arbeit, die paste vorher geleistet hat.

Es funktioniert zwar, ist aber nicht sehr elegant oder resourcenschonend.

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 24.06.2004 18:23:39

Joghurt hat geschrieben:Nun, pro Zeile werden 3 (oder sogar 6) Prozesse aufgerufen, nur um die vorher zusammengesetzte Zeile wieder auseinanderzupfriemeln. Ganz zu schweigen von der Arbeit, die paste vorher geleistet hat.

Es funktioniert zwar, ist aber nicht sehr elegant oder resourcenschonend.
Jetzt verstehe ich, was du meinst.

Nichts für ungut, aber dein Script ist nun wirklich nicht für's Lehrbuch geeignet. :wink: Das Problem lässt sich auch mit bash-Mitteln etwas eleganter lösen. Aber hier ging es ja anscheinend um eine einmalige Aktion und außerdem erschließt sich mir den Sinn nicht, wieso man zusammengehörige Information wild verteilt in mehreren Dateien hat und es anscheinend nicht mal eine Referenz der Beziehungen gibt.

Unter solchen Umständen tut es also auch ein unschöner Hack. :wink:
Gruß
ernohl

Antworten