Probleme mit array befüllen und/ oder auslesen

  • Hi,


    ich bin eigentlich mehr der Java, C# usw. Entwickler und bin jetzt jedoch zwangsläufig auf eine kleine Skript Anwendung für mein Raspberry angewiesen. Nun hab ich schon einige Beiträge und sonstiges zu diesen Thema durchgelesen aber irgend wie finde ich trotzdem nicht meinen Fehler nicht und hoffe jemand kann mir sagen wo ich mich zu blöd angestellt habe;)


    Ich möchte dass das Skript eine Datei von einen FTP Server runter lädt → Das funktioniert ohne Probleme


    Anschließend soll die Datei zeilenweise in ein Array eingelesen werden → Funktioniert meines Erachtens auch


    Danach soll die Datei gelöscht werden → Funktioniert


    Anschließend soll das Array in einer Schleiße abgearbeitet werden und zwar wird ein Schlagwort gesucht (stop, bild, video) und anschließend darauf reagiert. S.h.
    Wenn Array[0] → Bild dann mache ein Bild und speichere es, erhöhe den Index
    Array[1] → Video Mache ein Video und hole dir die nötigen Parameter aus den nächsten zwei indexen, erhöhe index um 3
    Array[4] → stop beende die Anwendung


    Nun läuft das Ding ohne Fehler durch... jedoch wird sofort in den Abzweig stop gesprungen und das Programm beendet obwohl der Befehl stop erst an letzter stelle steht das heißt alles andere wird ignoriert bzw. ich habe fast das Gefühl das kein richtiger Vergleich stattfindet.


    Ich hoffe jemand kann meine Blindheit beenden und mir sagen was ich falsch gemacht habe. Entschuldigung schon mal für den großen Quellcode aber ich möchte lieber auf Nummer sicher gehen und poste deshalb den gesamten Quellcode und nicht nur den teil wo meiner Meinung nach das Problem liegt.


  • In bash müssen die Variablen immer mit einem $ prefixed werden. Ausser die Variable steht auf der linken Seite der Operation. Weiterhin müssen Leerzeichen vor und nach dem = beim Stringvergleich stehen. Siehe dazu hier genauere Details.

    Ausserdem kann man auch in bash Einrückungen wie in Java und C# vornehmen um Script leichter lesbar zu machen :shy:

  • Mit Arrays kann nur bash umgehen, nicht sh. Desweiteren muss ein Array eigentlich erst als solches vorher initialisiert werden, mit einer Ausnahme: bash v3 konnte das auch noch nicht...
    Beispiel:

    Desweiteren:

    Code
    if [ "${array[VarJ]}"="stop" ]
    echo "${array[VarJ]}"
    echo "Ich beende"
    then

    Sowas ist falsch. Evtl. bedingt durch die eher untypische Schreibweise... Besser wäre: if [ "${array[VarJ]}" = "stop" ]; then
    Dann passt da auch kein "echo" zwischen :fies:

    Wie framp auch schon anmerkte helfen Einrückungen enorm die Übersicht zu behalten, um zu erkennen wozu was gehört etc.

    Was aber vermutlich dein Problem ist: verwirrende Variablen Benennungen :D Du verwendest nirgends VarJ sondern nutzt nur VarI "array[VarI]=$value" aber weiter unten nutzt du dann "if [ "${array[VarJ]}"="stop" ]" ... J nicht I


    PS: Wenn das Script selbst mit sudo ausgeführt wird werden auch alle darin enthaltenen Befehle als root ausgeführt, es sind also keine weiteren sudo's notwendig.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!