Michitux
22-08-2004, 12:42
Hallo!
Ich arbeite seit ein paar Wochen an einem Shell-Script, dass Bilder nach Motiven in Verzeichnisse sortiert (mein erstes Shell-Script...). Das klappt auch soweit, doch jetzt wollte ich das Script, das die Bilder in die Verzeichnisse linkt in das eigentliche Script als Funktion integrieren:
name () { code ; }
Ursprünglich hatte ich am Ende des Scriptes exit, doch wenn ich das so lasse, wird das gesamte Script beendet und nicht nur die Funktion....
Doch das Hauptproblem ist, dass in der Funktion die Funktion sozusagen sich selbst aufruft... Das geht auch soweit... Doch die Funktion macht dann irgendwie nicht weiter...bzw. die Zählvariable, die natürlich überall gleich heißt wird irgendwie übernommen, doch eigentlich sollte das doch nicht sein - oder? Ich hab, meine ich, gelesen, dass die Variablen wieder auf den Wert gesetzt werden, den sie vor Aufruf der Funktion hatten... Und außerdem sind meine Variablen doch nur lokal - oder?
Was kann ich da machen?
Viele Grüße
Michitux
Hier ein Auszug aus dem Script, d.h. diese Funktion (des gesamte ist zu lang, um es hier einzufügen und eine Datei anhängen geht irgendwie nicht.... :( )
#!/bin/bash -xv
#pictbase
exitstatus=0
pictdatabase_sort () {
#########################################
#########################################
### Einsortieren der Bilder in Ordner ###
#########################################
#########################################
#Übernommene Variablen setzen
pict="$1"
base="$2"
dir="$3"
picttypes=$4
number=$5
album=$6
exitstatus=0
#Ist das Ende der Sortieraktion schon erreicht?
if ! [ $number -eq 0 ]
then
#Setzen der Zählvariable
s=1
#Bis zur Anzahl der Bildertypes Schleife:
while [ $s -le $picttypes ]
do
#Wie heißt das aktuelle Motiv?
type=`cat ~/.pictset | cut -d " " -f$s`
#Wurde dieses Motiv bereits verarbeitet?
if ! ( echo "$dir" | perl -pe 's/$ENV{base}//' | grep $type )
then
#existiert bereits dieses Verzeichnis (Name=Motiv), ansonsten wird es erstellt
if ! test -d "$dir/$type"
then
mkdir "$dir/$type"
fi
if ! [ -d "$dir/$type" ]
then
Xdialog -title "Error" -msgbox "Verzeichnis $dir/$type konnte nicht angelegt werden. Bitte Überprüfen Sie Ihre Berechtigungen. Programm wird beendet" 0 0
exitstatus=1
break
fi
if [ $exitstatus -eq 0 ]
then
#link in dieses Verzeichnis legen
if ! ln -s "$pict" "$dir/$type/`basename "$pict"`" 2> ~/.Error
then
Xdialog -title "Error" -msgbox "Fehler:
`cat ~/.Error` "
exitstatus=1
fi
if [ $album -eq 1 ]
then
if ! [ -d "$dir/$type"/tn ]
then
mkdir "$dir/$type/tn"
fi
ln -s "$base/tn/`basename "$pict"`" "$dir/$type/tn/"
ln -s "$base/tn/`basename "$pict" | sed s/"\.JPG"/\.med\.JPG/`" "$dir/$type/tn/"
fi
#Für dieses Verzeichnis erneut pictdatabase_sort starten
pictdatabase_sort $pict $base $dir/$type $picttypes `expr $number - 1` $album
fi
fi
if [ $exitstatus -eq 1 ]
then
break
else
s=`expr $s + 1`
fi
done
fi ;
}
Ich arbeite seit ein paar Wochen an einem Shell-Script, dass Bilder nach Motiven in Verzeichnisse sortiert (mein erstes Shell-Script...). Das klappt auch soweit, doch jetzt wollte ich das Script, das die Bilder in die Verzeichnisse linkt in das eigentliche Script als Funktion integrieren:
name () { code ; }
Ursprünglich hatte ich am Ende des Scriptes exit, doch wenn ich das so lasse, wird das gesamte Script beendet und nicht nur die Funktion....
Doch das Hauptproblem ist, dass in der Funktion die Funktion sozusagen sich selbst aufruft... Das geht auch soweit... Doch die Funktion macht dann irgendwie nicht weiter...bzw. die Zählvariable, die natürlich überall gleich heißt wird irgendwie übernommen, doch eigentlich sollte das doch nicht sein - oder? Ich hab, meine ich, gelesen, dass die Variablen wieder auf den Wert gesetzt werden, den sie vor Aufruf der Funktion hatten... Und außerdem sind meine Variablen doch nur lokal - oder?
Was kann ich da machen?
Viele Grüße
Michitux
Hier ein Auszug aus dem Script, d.h. diese Funktion (des gesamte ist zu lang, um es hier einzufügen und eine Datei anhängen geht irgendwie nicht.... :( )
#!/bin/bash -xv
#pictbase
exitstatus=0
pictdatabase_sort () {
#########################################
#########################################
### Einsortieren der Bilder in Ordner ###
#########################################
#########################################
#Übernommene Variablen setzen
pict="$1"
base="$2"
dir="$3"
picttypes=$4
number=$5
album=$6
exitstatus=0
#Ist das Ende der Sortieraktion schon erreicht?
if ! [ $number -eq 0 ]
then
#Setzen der Zählvariable
s=1
#Bis zur Anzahl der Bildertypes Schleife:
while [ $s -le $picttypes ]
do
#Wie heißt das aktuelle Motiv?
type=`cat ~/.pictset | cut -d " " -f$s`
#Wurde dieses Motiv bereits verarbeitet?
if ! ( echo "$dir" | perl -pe 's/$ENV{base}//' | grep $type )
then
#existiert bereits dieses Verzeichnis (Name=Motiv), ansonsten wird es erstellt
if ! test -d "$dir/$type"
then
mkdir "$dir/$type"
fi
if ! [ -d "$dir/$type" ]
then
Xdialog -title "Error" -msgbox "Verzeichnis $dir/$type konnte nicht angelegt werden. Bitte Überprüfen Sie Ihre Berechtigungen. Programm wird beendet" 0 0
exitstatus=1
break
fi
if [ $exitstatus -eq 0 ]
then
#link in dieses Verzeichnis legen
if ! ln -s "$pict" "$dir/$type/`basename "$pict"`" 2> ~/.Error
then
Xdialog -title "Error" -msgbox "Fehler:
`cat ~/.Error` "
exitstatus=1
fi
if [ $album -eq 1 ]
then
if ! [ -d "$dir/$type"/tn ]
then
mkdir "$dir/$type/tn"
fi
ln -s "$base/tn/`basename "$pict"`" "$dir/$type/tn/"
ln -s "$base/tn/`basename "$pict" | sed s/"\.JPG"/\.med\.JPG/`" "$dir/$type/tn/"
fi
#Für dieses Verzeichnis erneut pictdatabase_sort starten
pictdatabase_sort $pict $base $dir/$type $picttypes `expr $number - 1` $album
fi
fi
if [ $exitstatus -eq 1 ]
then
break
else
s=`expr $s + 1`
fi
done
fi ;
}