For Schleife in eine Variable(String) einlesen

J

JCB

Mitglied
Moin,

Folgendes Script soll checken ob es auf dem Server neue Dateien eines bestimmten Musters gibt und diese dann herunterladen. Soweit ist mein Script schon fertig, nur habe ich aus VB Zeiten noch die Zeile in erinnerung die eine For-Schleife in einen String einlesen kann. Die Bash sträubt sich da noch etwas. Was mache ich da falsch?? Nicht lachen, bin noch nicht der Mega Coder, aber bis auf die Schleife macht es was ich will :) Der String soll dann alle Dateinamen die downzuloaden sind, getrennt mit Leerzeichen enthalten.

Code:
#!/bin/sh
cd /pub/dnb/ftp/gb/fromgb

#liste holen und in lokaler Datei speichern
lftp -c "open -u username,password ftp.server.com/gets; ls C???M*.zip > /var/log/globalbatch"

#formatieren zu datei namens gbcurrent
cut -f 12 -d " " /var/log/globalbatch > /var/log/gbcurrent

#gbload, das was letztendlich runtergeladen werden soll als Liste erstellen
comm -3 /var/log/gbcurrent /var/log/gbold > /var/log/gbload

#gbload in variable einlesen

for i in `cat /var/log/gbload`; do

    downloads=$downloads$i;
done;


lftp -c "open -u username,password ftp.server.com/gets; get $downloads"

#derzeitiger Verzeichnisinhalt als old speichern
cp /var/log/gbcurrent /var/log/gbold

#alle dateien entpacken
unzip $downloads

Gruß,

JCB
 
Hallo

JCB schrieb:
Code:
#!/bin/sh
cd /pub/dnb/ftp/gb/fromgb

#liste holen und in lokaler Datei speichern
lftp -c "open -u username,password ftp.server.com/gets; ls C???M*.zip > /var/log/globalbatch"

#formatieren zu datei namens gbcurrent
cut -f 12 -d " " /var/log/globalbatch > /var/log/gbcurrent

#gbload, das was letztendlich runtergeladen werden soll als Liste erstellen
comm -3 /var/log/gbcurrent /var/log/gbold > /var/log/gbload

#gbload in variable einlesen

for i in `cat /var/log/gbload`; do

    downloads=$downloads$i;
done;


lftp -c "open -u username,password ftp.server.com/gets; get $downloads"

#derzeitiger Verzeichnisinhalt als old speichern
cp /var/log/gbcurrent /var/log/gbold

#alle dateien entpacken
unzip $downloads

Gruß,

JCB

Mein Vorschlag:
Ändere mal folgendes:
Code:
#gbload in variable einlesen

downloads="$(cat /var/log/gbload)"; #Alles in einem Array

for i in ${downloads[*]}; do

lftp -c "open -u username,password ftp.server.com/gets; get $i";
done
#derzeitiger Verzeichnisinhalt als old speichern
cp /var/log/gbcurrent /var/log/gbold

#alle dateien entpacken
for i in ${downloads[*]}; do
unzip "$i"
done

Nicht sehr elegant und ungeprüft, aber wenn du dir ein wenig man bash anschaust, wird es werden. ;)
Ich würde das gesamte Problem etwas anders lösen.
Aber so verstehst du wenigstens um was es geht.
Falls du diese hässlichen Leerzeichen in Dateinamen hast, schau dir auch mal das Quoting der shell an.

HTH Gruß Wolfgang
 
Hallo Wolfgang,

vielen dank für deinen Input, jedoch ist dies nicht so elegant, da sich lftp dann x mal einloggen muss und das dauert bei der Ami-Kiste seeehr lange.

Das mit den Namen in den String wird nix?

Gruß,

Jens
 
kannst ja lftp durch wget ersetzen
 
Hmm, wie sieht /var/log/gbload aus? Vielleicht tuts auch (ohne for-Schleife):

Code:
downloads=$(cat /var/log/gbload | tr "\n" " ")

Gruss, Xanti
 
Hallo
Wenn du das gesamte Array übergeben willst, dann lass eben for i in weg und übergib das gesamte Array am Stück.

Code:
lftp -c "open -u username,password ftp.server.com/gets; get ${downloads[*]}";

Gruß Wolfgang
 
Hallo Xanti, Hallo Wolfgang,

die Vorschläge werde ich erstmal ausprobieren. Danke für Eure Hilfe.

Erfolgsmeldung am Dienstag:)

Gruß,

JCB

[edit]

So, es funktioniert wunderbar mit einer Mischung aus beiden Lösungen. Musste noch das Vergleichsscript anpassen, da auf dem Server Dateien automatisch wieder verschwinden und comm das auch als Unterschied interpretiert. Das ging aber gut wegzumachen.

Nochmals besten Dank an euch beide.

Gruß,

JCB
 
Zuletzt bearbeitet:

Ähnliche Themen

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

Wie komme ich an den Inhalt des Inhalts einer Variable?

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Windows clients können nicht mehr auf lange laufendes System zugreifen

Zurück
Oben