For Schleife in eine Variable(String) einlesen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von JCB, 10.03.2006.

  1. JCB

    JCB Mitglied

    Dabei seit:
    27.02.2006
    Beiträge:
    42
    Zustimmungen:
    0
    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
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 10.03.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    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
     
  4. JCB

    JCB Mitglied

    Dabei seit:
    27.02.2006
    Beiträge:
    42
    Zustimmungen:
    0
    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
     
  5. #4 StyleWarZ, 11.03.2006
    StyleWarZ

    StyleWarZ Profi Daten Verschieber

    Dabei seit:
    05.03.2004
    Beiträge:
    1.929
    Zustimmungen:
    0
    kannst ja lftp durch wget ersetzen
     
  6. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Hmm, wie sieht /var/log/gbload aus? Vielleicht tuts auch (ohne for-Schleife):

    Code:
    downloads=$(cat /var/log/gbload | tr "\n" " ")
    
    Gruss, Xanti
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 Wolfgang, 11.03.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
  9. #7 JCB, 12.03.2006
    Zuletzt bearbeitet: 17.03.2006
    JCB

    JCB Mitglied

    Dabei seit:
    27.02.2006
    Beiträge:
    42
    Zustimmungen:
    0
    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
     
Thema:

For Schleife in eine Variable(String) einlesen

Die Seite wird geladen...

For Schleife in eine Variable(String) einlesen - Ähnliche Themen

  1. for schleife für eine Zeile

    for schleife für eine Zeile: Hallo, ich bin neu hier in diesem Forum. Evtl. kann mir ja einer von euch bei meinem Problem helfen. Ich möchte für ein entpackprogramm eine...
  2. [FRAGE] Dateinamen normalisieren während sie in einer "for" Schleife sind

    [FRAGE] Dateinamen normalisieren während sie in einer "for" Schleife sind: Moin Gemeinde, ich habe ein Skript welches Emails abholt und weiterverarbeitet, manche müssen ausgedruckt werden. Nun hat sich herausgestellt...
  3. Dateien verschieben + Zeitstempel anhängen mit Hilfe einer for - Schleife

    Dateien verschieben + Zeitstempel anhängen mit Hilfe einer for - Schleife: Guten morgen zusammen, könnt ihr mir bitte sagen warum meine for - Schleife nicht funktioniert? timestamp=$( date +%d.%m.%y_%H:%M:%S )...
  4. eine Schleife einbauen.

    eine Schleife einbauen.: Hallo Linux Freunde. Ich hab mir ein kleines Skript gebastelt, das mir MKV file die DTS Spur in AC3 umwandelt und automatisch wider zusammen...
  5. 2 Listen in einer for Schleife abarbeiten

    2 Listen in einer for Schleife abarbeiten: Hallo zusammen, Betriebssystem ist Suse Linux mit SH-Shell. Ich möchte folgendes machen: VAR1="/pfad1/" VAR2="/pfad2/" VAR3="${VAR1}1...