bash schleife verschachteln

Bash, Shell, PHP, Python, Perl, CGI
schnuffel
Posts: 47
Joined: 2003-09-15 16:52

bash schleife verschachteln

Post by schnuffel » 2008-06-23 17:43

Hi,

irgendwie raff ich es grad net

Code: Select all

for i in `grep "???" /root/knvdir`; do
for j in `grep "NEU" /root/knvdir_new`; do
echo $i $j
done
done


gibt mir folgendes aus

Code: Select all

???v07 NEUv07
???v07 NEUv08
???v08 NEUv07
???v08 NEUv08



ich hätte aber

Code: Select all

???v07 NEUv07
???v08 NEUv08


erwartet.
Leider sehe ich grad meinen Fehler nicht?!

das steht in den dateien
knvdir

Code: Select all

???v07
???v08


knvdir_new

Code: Select all

NEUv07
NEUv08


Any Ideas

Danke euch, Bernd

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: bash schleife verschachteln

Post by Roger Wilco » 2008-06-23 19:40

Was willst du denn erreichen? So wie dein Code jetzt ist, ist die Ausgabe jedenfalls korrekt (2 Matches in der 1. Datei, 2 Matches in der 2. Datei, 2*2 => 4 mal Ausgabe).

schnuffel
Posts: 47
Joined: 2003-09-15 16:52

Re: bash schleife verschachteln

Post by schnuffel » 2008-06-24 09:38

Sorry
ich will erreichen das mir als variable i der alte name und als j der neue Name gegeben wird den ich dann an ein FTP Script übergebe welches mir auf einem Remot FTP Dateien umbenennt.

Ich muß die Dateien auf dem Remote FTP Server die mit ??? beginnen remote auf dem Server nach NEU* umbenennen, erst dann darf ich diese zu mir holen damit diese verarbeitet werden können.

Das ganze sie derzeit so aus.

Code: Select all

#Fragezeichen Dateien auslesen
/root/ftp_auslesen.sh > /root/dir

#Fragezeichen Dateien umbenennen
sed -e 's/???/KNV/g' /root/dir|grep KNV > /root/dir_new
for i in `grep "???" /root/dir`; do
for j in `grep "KNV" /root/dir_new`; do
/root/rename.sh $i $j
done
done

#Umbenannte Dateien holen
cd $ZIEL
/root/get.sh

#Temp KNV dir loeschen
rm /root/dir
rm /root/dir_new


/root/ftp_auslesen.sh

Code: Select all

#!/bin/sh
ftp ftp.xxx.de <<EOF
cd /doc/Test
nlist
EOF


/root/rename.sh

Code: Select all

#!/bin/sh
ftp ftp.xxx.de <<EOF
cd /doc/Test
rename $1 $2
EOF


/root/get.sh

Code: Select all

#!/bin/sh

ftp ftp.xxx.de <<EOF
cd /doc/Test
mget NEU*
a
mdelete NEU*
a
EOF


Gruß Bernd

User avatar
Joe User
Project Manager
Project Manager
Posts: 11616
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bash schleife verschachteln

Post by Joe User » 2008-06-24 11:00

Alle Scripte in einem zusammengefasst:

Code: Select all

#!/bin/bash

ZIEL=""
FTPSERVER="ftp.domain.tld"

function ftp_rename() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
rename "${1}" "${2}"
EOF
}

function ftp_nlist() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
nlist
EOF
}

function ftp_get() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
mget NEU*
a
mdelete NEU*
a
EOF
}

for i in `ftp_nlist | grep "???"`; do
ftp_rename "${i}" "$(sed -e 's/???/KNV/g' -i "${i}")"
done
cd $ZIEL
ftp_get


HTH

PS: http://tldp.org/LDP/abs/html/
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

schnuffel
Posts: 47
Joined: 2003-09-15 16:52

Re: bash schleife verschachteln

Post by schnuffel » 2008-06-24 11:44

Habs gerade mal getestet, klapp leider nicht

Code: Select all

sed: can't read ???v07: No such file or directory
Connected to ftp.xxx.de.


das gleiche dann für datei ???v08

das kommt bevor er sich connected hat (zumindest auf der Konsole)

Gruß Bernd

User avatar
Joe User
Project Manager
Project Manager
Posts: 11616
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bash schleife verschachteln

Post by Joe User » 2008-06-24 15:24

Sorry, das ' -i' im sed war zuviel:

Code: Select all

#!/bin/bash

ZIEL=""
FTPSERVER="ftp.domain.tld"

function ftp_rename() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
rename "${1}" "${2}"
EOF
}

function ftp_nlist() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
nlist
EOF
}

function ftp_get() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
mget NEU*
a
mdelete NEU*
a
EOF
}

for i in `ftp_nlist | grep "???"`; do
ftp_rename "${i}" "$(sed -e 's/???/KNV/g' "${i}")"
done
cd $ZIEL
ftp_get
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11616
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bash schleife verschachteln

Post by Joe User » 2008-06-24 15:42

Und hier nochmal ohne extra Subshell für sed:

Code: Select all

#!/bin/bash

ZIEL=""
FTPSERVER="ftp.domain.tld"

function ftp_rename() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
rename "${1}" "${2}"
EOF
}

function ftp_nlist() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
nlist
EOF
}

function ftp_get() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
mget NEU*
a
mdelete NEU*
a
EOF
}

for i in `ftp_nlist | grep "???"`; do
ftp_rename "${i}" "${i/???/KNV}"
done
cd $ZIEL
ftp_get


Bei Bedarf könnte man auch noch grep ersetzen und statt dem externen ftp das von bash bereitgestellte /dev/tcp nutzen ;)
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

schnuffel
Posts: 47
Joined: 2003-09-15 16:52

Re: bash schleife verschachteln

Post by schnuffel » 2008-06-24 16:07

hmm leider klappt es nicht

gleiche Fehlermeldung wie vorher.

Anscheinend versucht der sed das lokal zu editieren.
Weil folgenden aufruf

Code: Select all

for i in `ftp_nlist | grep "???"`; do echo "$i" "$(sed -e 's/???/KNV/g' "${i}")"; done

bringt das

Code: Select all

sed: can't read ???v07: No such file or directory
???v07
sed: can't read ???v08: No such file or directory
???v08


selbst im Originalscript von dir passierts das der sed meckert bevor auf den FTP connected wurde.

Code: Select all

sed: can't read ???v07: No such file or directory
Connected to ftp.xxx.de.


daher meine ich das der sed anschlägt bevor er auf den FTP connected hat
Gruß Bernd

User avatar
Joe User
Project Manager
Project Manager
Posts: 11616
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bash schleife verschachteln

Post by Joe User » 2008-06-24 16:58

Nimm das Script ohne sed, das sollte funktionieren...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

schnuffel
Posts: 47
Joined: 2003-09-15 16:52

Re: bash schleife verschachteln

Post by schnuffel » 2008-06-25 10:08

Sorry, aber den sed brauch ich doch um das ??? mit KNV zu ersetzen oder?
ich habe es nun so gelöst, da sed nicht arbeitet wenn ich ihm eine Variable vorwerfe.

Code: Select all

for i in `ftp_nlist | grep "???"`; do
echo "$i" > /root/dir && ftp_rename "${i}" "$(sed -e 's/???/KNV/g' /root/dir)"
done


Gruß Bernd

User avatar
Joe User
Project Manager
Project Manager
Posts: 11616
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bash schleife verschachteln

Post by Joe User » 2008-06-25 10:55

schnuffel wrote:Sorry, aber den sed brauch ich doch um das ??? mit KNV zu ersetzen oder?

Nein, das kann bash selbst:

Code: Select all

"${i/???/KNV}"
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

schnuffel
Posts: 47
Joined: 2003-09-15 16:52

Re: bash schleife verschachteln

Post by schnuffel » 2008-07-03 21:48

Danke, nun klappt alles.
Kann man das FTP irgendwie noch ergänzen das remote die Dateien erste gelöscht werden wenn Sie wirklich komplett runtergeladen wurden.

Ciao Bernd

User avatar
Joe User
Project Manager
Project Manager
Posts: 11616
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bash schleife verschachteln

Post by Joe User » 2008-07-04 10:24

Stichwort: md5sum
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

schnuffel
Posts: 47
Joined: 2003-09-15 16:52

Re: bash schleife verschachteln

Post by schnuffel » 2008-07-07 17:28

Danke, aber ich verstehe da wohl was nicht. Wie soll ich mir denn von der Remote datei die Prüfsumme holen?
Das bekomme ich nicht hin

der Remote FTP kann nur.

Code: Select all

Commands may be abbreviated.  Commands are:

!               cd              edit            glob            ls              mode            open            proxy           remopts         sendport        tenex           xferbuf
$               cdup            epsv4           hash            macdef          modtime         page            put             rename          set             throttle        ?
account         chmod           exit            help            mdelete         more            passive         pwd             reset           site            trace
append          close           features        idle            mdir            mput            pdir            quit            restart         size            type
ascii           cr              fget            image           mget            msend           pls             quote           rhelp           sndbuf          umask
bell            debug           form            lcd             mkdir           newer           pmlsd           rate            rmdir           status          unset
binary          delete          ftp             less            mls             nlist           preserve        rcvbuf          rstatus         struct          usage
bye             dir             gate            lpage           mlsd            nmap            progress        recv            runique         sunique         user
case            disconnect      get             lpwd            mlst            ntrans          prompt          reget           send            system          verbose


Ciao Bernd

User avatar
Joe User
Project Manager
Project Manager
Posts: 11616
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bash schleife verschachteln

Post by Joe User » 2008-07-07 19:12

md5sum vor dem Upload und nach dem Download anwenden und die Resultate auswerten.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

schnuffel
Posts: 47
Joined: 2003-09-15 16:52

Re: bash schleife verschachteln

Post by schnuffel » 2008-07-09 13:14

Ja genau da liegt mein Problem, Die Dateien die ich per FTP hole lade ich nicht hoch. Die werden mir bereitgestellt.
Gruß Bernd

User avatar
Joe User
Project Manager
Project Manager
Posts: 11616
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bash schleife verschachteln

Post by Joe User » 2008-07-09 13:24

Ohne vertrauenswürdige Checksumme ist die von Dir gewünschte Datenintegrität nicht erfüllbar.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

chris76
Moderator
Moderator
Posts: 2015
Joined: 2003-06-27 14:37
Location: Germering

Re: bash schleife verschachteln

Post by chris76 » 2008-07-09 22:07

Hi Markus,
wie macht das ncftpget denn, der hat doch eine Funktion dateien erst nach erfolgreichem Download auf der Gegenseite löscht wenn man -DD verwendet.
Gruß Christian

BofH excuses: YOU HAVE AN I/O ERROR -> Incompetent Operator error

User avatar
Joe User
Project Manager
Project Manager
Posts: 11616
Joined: 2003-02-27 01:00
Location: Hamburg

Re: bash schleife verschachteln

Post by Joe User » 2008-07-10 08:39

Dort wird lediglich die übertrage Anzahl Bits mit der Dateigrösse verglichen, was bekanntlich keine Rückchlüsse auf die Datenintegrität zulässt: Bits kippen hin und wieder auch mal um ;)
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

chris76
Moderator
Moderator
Posts: 2015
Joined: 2003-06-27 14:37
Location: Germering

Re: bash schleife verschachteln

Post by chris76 » 2008-07-10 20:23

ah ok, dann nützt ihm das ja auch nix
Gruß Christian

BofH excuses: YOU HAVE AN I/O ERROR -> Incompetent Operator error