Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Shell-Script Erzeugen einer Datei-Liste

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Thomas
Gast





BeitragVerfasst am: 14. Jul 2001 17:27   Titel: Shell-Script Erzeugen einer Datei-Liste

Bei dem nachfolgenden Script habe ich folgendes Problem:
Wenn eine Datei enthalten ist die ein Leerzeichen hat (neue Dateien auf den Rechner.dat) dann enthält die Liste
nur folgenden Eintrag - "neue" der Rest fehlt.
Ich finde den Fehler in dem Script nicht (stammt nicht von mir)
Wie kann ich den script schrittweise ablaufen lassen? Mit der Variablen set -vx läuft das mir zu schnell.

Der Script bringt mich noch zum Wahnsinn !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Script:
#!/bin/sh

(echo -e user $FTPUSER $FTPPASS \
\npassive \
\verbose \
\ncd $REMOTEDVZ \
\nls -lR $FILELISTE \
\n ) \
| ftp -ni $FTPSERVER
for i in `egrep ^'\./|\-r' $FILELISTE`
do
# $i is a directory
if [ -n "`echo $i | egrep ^'\./'`" ] ; then
# we have a directory, remove colon
AKTDVZ=`expr $i : '\(.*\):.*'`
if [ ! -d "$AKTDVZ" ] ; then
mkdir $AKTDVZ
fi
fi
# $i is a file
if [ ! -z "`echo $i | egrep ^'\-r'`" ] ; then
FILEPARAM=1
continue
fi
# ignore file parameters
case $FILEPARAM in
[1-3]) FILEPARAM=`expr $FILEPARAM + 1`;;
4) FILEGROESSE=$i; FILEPARAM=`expr $FILEPARAM + 1`;;
[5-7]) FILEPARAM=`expr $FILEPARAM + 1`;;
Cool FILENAME=$i;;
*) continue;;
esac
# get the filename
if [ -n "$FILENAME" ] ; then
# if file not exists
if [ ! -f "$AKTDVZ/$FILENAME" ] ; then
echo $AKTDVZ/$FILENAME >> $FILES2GET
else
# file is probably changed
set -- `ls -l $AKTDVZ/$FILENAME`
if [ "$FILEGROESSE" -ne "$5" ]; then
echo $AKTDVZ/$FILENAME >> $FILES2GET
fi
fi
FILENAME=
FILEGROESSE=0
FILEPARAM=0
fi
done
 

Jochen
Gast





BeitragVerfasst am: 16. Jul 2001 8:18   Titel: Re: Shell-Script Erzeugen einer Datei-Liste

Zuerst einmal: Hat das Board Dein Skript zerrupft? Ich sehe nirgends eine Zuweisung an FILELISTE. Wenn Du [code] ...[/code] um Dein Skript setzt, bleibt die Einrückung erhalten und es wird nicht so zerrupft. Und wenn Du im Klartext mit dazu schreibst, was das Skript eigentlich machen soll, kämpft man sich eher durch die expr-Aufrufe als ohne Beschreibung...

So weit ich' gerafft habe, soll das Skript einen FTP-Server sozusagen händisch spiegeln: Alle Dateien und Unterverzeichnisse durchgehen und eine Liste aller neuen/veränderten Dateien in Datei $FILES2GET abspeichern. So weit, so gut.

Aber ich sehe nicht recht, inwieweit das Skript überhaupt funktionieren kann. Die Ausgabe vom "ls -lR" des FTP-Servers liefert Dir den Verzeichnisbaum aller in $FILELISTE enthaltenen Verzeichnisse und Dateien. Das egrep in der for-Schleife läuft für jeden dieser Einträe in $FILELISTE einmal. Aber Du behandelst Die Einträge so, als ob sie die Ausgabe des FTP-Servers wären; das sind sie aber nicht.

Später sieht es so aus, als würdest Du eine Ausgabezeile von Hand zerlegen, um an die Grösse der Datei und deren Namen zu kommen. Abgesehen davon, dass das Verfahren viel zu kompliziert ist, ist es eben auch bei Blanks im Dateinamen fehleranfällig: Der Fall * im case-Statement setzt den nächsten Schleifendurchlauf an, wenn mehr als 8 Einträge zu so einer Zeile bestehen. Damit wird der Rest des Dateinamens (Arg. Cool überschlagen. Irgendwo (und ich habe nicht gefunden, wo!) trennt Dein Skript an den Leerstellen in so einer Zeile die Wörter auf und setzt sie zeilenweise. Das trifft aber auch Leerstellen im Dateinamen...

Schau Dich entweder nach einem anderen Skript um oder programmier es Dir neu. awk oder perl wären dabei die richtige Wahl.

Und nein, ein Single-Stepping für Shellskripte gibt es nicht. Für die ksh gab es mal vor Urzeiten ein "kshdbg"-Skript in der iX, in der ksh selbst implementiert! Aber für die bash oder sh ist mir da nichts bekannt.

Jochen
 

Ozi
Gast





BeitragVerfasst am: 16. Jul 2001 10:21   Titel: Re: Shell-Script Erzeugen einer Datei-Liste

Hi,

zum debuggen machst du folgendes:

Ändere die Zeile

#!/bin/bash

in

#!/bin/bash -x

dann siehst du, mit was die Shell nach den einzelnen Befehlen weiterarbeitet. Damit findest du den Fehler
ganz bestimmt. Nur nicht aufgeben

@Jochen

Sowas solltest du doch wissen als Shellprofi, oder ?



cu

Oliver
 

Jochen
Gast





BeitragVerfasst am: 16. Jul 2001 10:43   Titel: Re: Shell-Script Erzeugen einer Datei-Liste

@Oliver:

Sischer dat.

Aber Thomas schreibt, dass es ihm mit "mit set -vx zu schnell geht". Ein "set -x" bewirkt exakt das gleiche wie "bash -x". Mit der Information ist Thomas also nicht geholfen...

Jochen
 

Ozi
Gast





BeitragVerfasst am: 16. Jul 2001 11:46   Titel: Re: Shell-Script Erzeugen einer Datei-Liste

Tja,

so kann's gehen ....
 

hugenay
Gast





BeitragVerfasst am: 16. Jul 2001 16:02   Titel: Re: Shell-Script Erzeugen einer Datei-Liste

lol

aber mal im ernst: bei mir produziert die eingabe von set -x und dann der skriptaufruf einen anderen output, als wenn ich als interpreter bash -x angebe. Vielleicht spuken bei mir ja noch heimlich andere variablen rum?!
 

Jochen
Gast





BeitragVerfasst am: 16. Jul 2001 16:22   Titel: Re: Shell-Script Erzeugen einer Datei-Liste

Hm, ich denke nicht. "set -x" setzt die Option sozusagen nachträglich für die Shell, die das set-Kommando ausführt. Man kann also in einem Skript Bereiche mittels "set -x" und "set -" eingrenzen, die man genauer betrachten will (oder mit "set -v" und "set -", wenn man nicht sehen will, was die Shell startet, sondern wie die Kommandos direkt im Skript stehen).

Wenn Du jetzt in Deiner Login-Shell "set -x" ausführst, gilt das für eben diese, aber nicht für die Shell, die dann Dein Skript ausführt. Daher wirst Du nur sehen, dass Dein Skript gestartet wird.

Wenn Du möchtest, dass die Option für Dein Skript gilt, musst Du dort "-x" wieder explizit setzen, ob nun beim Aufruf mittels "bash -x" oder im Skript mittels "#!/bin/bash -x" oder mittels "set -x".

War's das, oder habe ich Dich missverstanden?
 

hugenay
Gast





BeitragVerfasst am: 16. Jul 2001 17:00   Titel: Re: Shell-Script Erzeugen einer Datei-Liste

yup, habe mal wieder was mit der umgebungsvererbung durcheinander geworfen, klar man muss set -x ja dann im skript setzen.
gruss hug.
 

marcdevil
Gast





BeitragVerfasst am: 20. Jul 2001 13:10   Titel: Re: Shell-Script Erzeugen einer Datei-Liste

ich hab mir das script nicht naeher angeschaut, aber zum Dateilisten erstellen mache ich immer:
find ./ -type f -exec du -sh {} ; > Filelist
 

marcdevil
Gast





BeitragVerfasst am: 20. Jul 2001 13:11   Titel: Re: Shell-Script Erzeugen einer Datei-Liste

vor dem ; > Filelist steht noch ein \
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy