[Bashscript] Prozedur wird in Schleife nur einmal aufgerufen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
fish12345
Beiträge: 164
Registriert: 05.10.2004 16:45:34

[Bashscript] Prozedur wird in Schleife nur einmal aufgerufen

Beitrag von fish12345 » 30.10.2005 14:41:55

Hi,

habe ein Problem bei folgendem Code

Code: Alles auswählen

list_user()

{

        if [ $useronly = "true" ]
        then
                echo -e "Kunde \n"
        else
                echo -e "Kunde: \t \t \t Betrag \n"

        fi

        number="`ls database/user/*.acc | wc -l`"
        recounter=$number


        for (( z=1 ; $z<=$number ; z++));
        do


                userfile="`ls database/user/*.acc | tail -n $recounter | head -n 1`"
                user="`echo $userfile |  sed "s/database\/\user/\//g" |  sed 's/\///g' | sed s/.acc//g`"
                name=$user


                recounter="`echo $number - $z | bc`"


                if [ "$useronly" = "true" ]
                then

                        echo "$name"

                else

                        calc_user
                        echo -e "$name \t $difpayed"


                fi;

        done
}
Prozedur wird mit dem Parameter

Code: Alles auswählen

useronly="false"
userquestion="false"
aufgerufen, aber leider wird die schleife dann nur einmal durchlaufen, sage ich useronly="true" funktioniert es, aber eben ohne meine $difpayed ausgabe, btw. $difpayed wird in calc_user ausgerechnet...

den kompletten code gibts http://nopaste.debianforum.de/1468

by fish

ps habe waehrend des bashen 2mal meinen ansatz veraendert deswegen ist auch noch viel muell drin...

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 30.10.2005 15:01:30

bei "useronly" = "false" wird innerhalb der Schleife die Funktion "calc_user" aufgerufen.
In dieser Funktion wird die Variable "number" verändert und beeinflußt wahrscheinlich die Anzahl der Durchläufe dieser Schleife. Du solltest die lokalen Variablen "i","z", "number",... usw mittels "local" als solche kennzeichnen:
z.B.:

Code: Alles auswählen

local number="`ls database/user/*.acc | wc -l`"
Gruß
gms

[edit]
hier noch der enstprechende Hinweis aus den Manpages:
man bash hat geschrieben: Variables local to the function may be declared with the local builtin
command. Ordinarily, variables and their values are shared between the
function and its caller.
[/edit]

fish12345
Beiträge: 164
Registriert: 05.10.2004 16:45:34

Beitrag von fish12345 » 30.10.2005 15:19:52

jo vielen dank, habs mittlerweile auch schon gemerkt, was fuer ein dummer fehler ;)

by fish

Antworten