Probleme mit dem Memwatch - Skript

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo in die Runde,

    ich habe hier als Anfänger das Buch "Raspberry Pi" von Maik Schmidt am lesen.
    Nun bin ich bei der Speicher-LED-Ampel angelangt. Nun habe ich da schon gegoogelt und geforscht um mein Problem im Vorfeld zu lösen. Ich habe das Skript aus dem Buch abgetippt, initialisiert und gestartet. Leider lief es nicht und spuckte nur Fehler aus.

    Dann habe ich das Skript hier aus der Abteilung (vielen Dank übrigends dafür) einfach
    kopiert und in den Editor eingefügt. Das ganze als Skript gespeichert und ebenfalls ausgeführt. Doch auch das lief nicht richtig. Er hat dann manchmal ein Problem mit dem Do-Befehl. Dieses konnte ich selber beheben. Nur leider ziehen sich die Fehler wie eine rote Schnur durch das Skript.

    Hat jemand derzeit das gleiche Projekt in Arbeit und bei dem es läuft ?

    Verdrahtung der LED's ist korrekt, da ich sie einzeln über den GPIO Befehl ansprechen kann.


    Ich muss euch sonst einmal die Fehler posten. Leider zeigt er die ja nur die nächsten, wenn ich die vorherigen behoben habe =(.


    Vielen Dank und viele Grüße

    André

    PS.: Ich hoffe, das Board, wo ich mein Problem gepostet habe, ist hier richtig ?

  • So ! Da bin ich nochmal....:daumendreh2:,

    Ich wollte euch nun einmal die Fehlermeldung zu dem Skript hier aus dem Forum geben.
    Das Skript ist ja hier zu finden: Memwatch Skript

    Ich könnte das Thema ja auch einfach in dem Buch überspringen. Aber dazu bin ich zu ehrgeizig. Ich möchte der Sache schon auf dem Grund gehen und lernen, wie die Programmierung arbeitet.
    Nur wollte ich erst Anhand der Skrips in dem Buch die Sachen ausprobieren um mich dann weiter in die Programmierung einzuarbeiten.

    Ich habe nun das Skript hier aus dem Forum per Copy&Paste in den Editor eingetragen, als SH-Datei abgespeichert, als Programm geöffnet und zuvor die Datei registriert. Starten tut sie ja auch, doch musste ich schon einige Befehle "umarbeiten", dass ich bis zur nächsten Fehlermeldung überhaupt kam. Hier nun die Fehlermeldung zum angehangenem Skript:


    pi@raspberryExperimental ~/Desktop $ ./memwatch2-internet.sh
    ./memwatch2-internet.sh: Zeile 17: Syntaxfehler beim unerwarteten Wort `done'
    ./memwatch2-internet.sh: Zeile 17: ` done'
    pi@raspberryExperimental ~/Desktop $

    Ich würde das gerne einmal nur kurz mit euch von Fehlermeldung zu Fehlermeldung abhandeln. Damit ich es besser verstehen kann. Ich würde mich riesig freuen, wenn ihr mir da kurz auf die Sprünge helfen könntet.

    Vielen Dank an euch für eure Mühen,

    Andre

  • Das Problem ist ein Tippfehler. Wie auch immer du den beim kopieren hinbekommen hast... es fehlt das ; in Zeile 14.
    Das Kapitel zu überspringen bringt nichts, das ist kein Problem mit dem Buch, dem Kapitel oder sonst etwas, sondern schlichtweg ein Fehler von dir der in jedem Kapitel vorkommen kann.
    Insgesamt ist es wichtig Fehlermeldungen lesen zu lernen. Hier sat er ihm gefällt das "done" in Zeile 17 nicht, er erwartet es noch nicht. Das done gehört zum for. Das for steht da, also MUSS er ein done erwarten. Also hast du einen Fehler in der Syntax von for gemacht.

    Jetzt habe ich aber eine Frage an dich: Wie "registriert" man denn eine Datei?du meinst bestimmt etwas anderes.

  • Hallo 'Horroreyes',

    stimmt...ich meinte, ich habe es via chmod-Befehl ausführbar gemacht :blush:.

    Ich habe jetzt nochmals alles zurück auf Anfang gesetzt und das original Skript aus dem Tutorial eingetragen.

    Nun kommt folgende Meldung:


    pi@raspberryExperimental ~/Desktop $ ./memwatch2-internet.sh
    ./memwatch2-internet.sh: Zeile 14: Syntaxfehler beim unerwarteten Wort `do'
    ./memwatch2-internet.sh: Zeile 14: ` for i in $green $yellow $red; do'
    pi@raspberryExperimental ~/Desktop $

    Ich hatte da vor ein paar Tagen ein wenig experimentiert und einfach das Semicolon entfernt. Daraufhin kam ich dann schon einmal bis zur Meldung von vorhin in Zeile 17.

    Ich habe teilweise aus der Not heraus die Teile, die der Terminal als Fehler anzeigte, gegen die aus dem Buch getauscht. Das ging dann soweit gut, bis ich zur berechnung des Speicherplatzes kam. Da ging dann nix mehr. Trotzdem wollte ich das einmal vom Grund her anpacken und durcharbeiten.

    Ist irgendwie komisch, dass das Skript so garnicht will :s.

    Viele Grüße und vielen Dank

    Andre

  • Hmmm joa das ist eine gute Frage.
    Folgender Code funktioniert bei mir prima:

    Code
    1 green=22
      2 yellow=23
      3 red=24
      4 
      5 # Initialsiert die LEDs bei Start des Programms
      6 
      7 for i in $green $yellow $red; do
      8     echo $i
      9 done
     10

    Heraus kommt:

    Code
    ~/temp$ bash test.sh 
    22
    23
    24

    Du bist natürlich schön darauf reingefallen, dass der Fehler an der geichen Stelle blieb, aber erst später auffiel...

    Also: Der Code sollte laufen, ich vermute auch ein Problem mit dem Zeichensatz oder sowas, wie dbv

  • Ich habe gerade mit dienem hochgeladenen Script rumprobiert, und das Problem ist tatsächlich da (mit dem wieder eingesetzten ; ). Ich habe den selben fehler wie du.
    Dann habe ich dein for auskommentiert und mein einfaches for mit dem echo stattdessen hingeschrieben-> ging
    Zeilen verglichen->das for war exakt gleich

    Du brauchst dich also nicht zu grämen, der Fehler war nicht sichtbar. Das Problem ist am Ende wohl ein "falsches Leerzeichen" in der Zeile 14. Lösche dort mal alle Leerzeichen vor dem for und mache sie neu. Dann sollte es tun. Eines davon ist irgendetwas anderes, vllt auch ein carriage-return von Windows oder so ein Zeug...

  • Guten Morgen in die Runde,

    ich nutze bis jetzt immer TightVNC von einem Windows Rechner aus. Dann sollte ich das Skript wohl mal direkt auf dem RPi einfügen. Sachen gibt es ja.....

    Danke für eure Tipps

    Andre

  • Hallo zusammen,

    nun habe ich das ganze einmal nur rein auf dem Pi gemacht.
    Einfach nochmal alles eingefügt und gestartet.

    Die Sache mit dem 'do' Befehl hatte ich ausgemerzt. Nun habe ich dafür folgende Meldungen wenn ich das Skript starte. Die Sache mit den Leerzeichen habe ich zuvor auch ausprobiert. Da scheint es doch nicht dran zu liegen.

    Hier mal die Fehlermeldung zur angehängten aktuellen Datei:


    pi@raspberryExperimental ~/Desktop $ ./memwatch2-internet.sh
    ./memwatch2-internet.sh: Zeile 15: gpio: Kommando nicht gefunden.
    ./memwatch2-internet.sh: Zeile 16: gpio: Kommando nicht gefunden.
    ./memwatch2-internet.sh: Zeile 15: gpio: Kommando nicht gefunden.
    ./memwatch2-internet.sh: Zeile 16: gpio: Kommando nicht gefunden.
    ./memwatch2-internet.sh: Zeile 15: gpio: Kommando nicht gefunden.
    ./memwatch2-internet.sh: Zeile 16: gpio: Kommando nicht gefunden.
    ./memwatch2-internet.sh: Zeile 50: Syntaxfehler beim unerwarteten Wort `then'
    ./memwatch2-internet.sh: Zeile 50: ` if [ "$available" -le 10 ]; then'
    ./memwatch2-internet.sh: Zeile 34: init_leds: Kommando nicht gefunden.
    ./memwatch2-internet.sh: Zeile 35: exit: Kommando nicht gefunden.
    pi@raspberryExperimental ~/Desktop $


    Viele Grüße und vielen Dank

    André

  • Ah ok, das ist eine viel deutlichere Meldung, bzw. mehrere. du hast die gpio-Bibliothek offensichtlich nicht "installiert", wie das geht weiß ich nciht aus dem Kopf... das solltest du wunderbar hier im Forum finden. Und in Zeile 50 hast du wieder ein Syntax-Problem

  • Hallo zusammen,

    ich habe vorhin noch einmal kurz etwas getüftelt.
    Ich stehe jetzt mit folgender Meldung am Start:


    oot@raspberryExperimental:/home/pi/Desktop# ./memwatch2-internet.sh
    ./memwatch2-internet.sh: Zeile 62: Syntax Fehler: Unerwartetes Dateiende.

    Ich habe da nun schon alles versucht und hätte nicht gedacht, das es mit einem simplen "done" nicht weiter geht :no_sad:.

    Hat noch jemand einen Tipp ? Ich habe die Datei noch einmal angehängt. Bin ja mal gespannt auf die kommenden Tutorials aus dem Buch. Ob die auch alle so wundersam laufen....?


    Viele Grüße und vielen Dank

    Andre

  • Hallo zusammen,

    ich habe nun das Skript weiter bearbeitet.
    Jetzt bin ich da, wo ich vor 2 Wochen schon einmal alleine war. Habe dann aber nochmal von vorne angefangen.

    Das Problem lag hier anscheinend nicht bei der Klammer, sondern an den Leerzeichen vor dem Kommando 'fi'. Das habe ich ausprobiert und nun habe ich ein Problem mit unten aufgeführten Formeln.

    Hier mal der genaue Text:


    root@raspberryExperimental:/home/pi/Desktop# ./memwatch2-internet.sh
    ./memwatch2-internet.sh: Zeile 44: total=383156: Kommando nicht gefunden.
    ./memwatch2-internet.sh: Zeile 45: memfree=146116: Kommando nicht gefunden.
    ./memwatch2-internet.sh: Zeile 46: cachefree=269516: Kommando nicht gefunden.
    ./memwatch2-internet.sh: Zeile 47: free=0: Kommando nicht gefunden.
    ./memwatch2-internet.sh: Zeile 48: free * 100 / total : Division durch 0. (Fehlerverursachendes Zeichen ist \"total \").
    ./memwatch2-internet.sh: Zeile 34: init_leds: Kommando nicht gefunden.
    ./memwatch2-internet.sh: Zeile 35: exit: Kommando nicht gefunden.
    root@raspberryExperimental:/home/pi/Desktop#

    Dazu kommen noch die "init_led" und das "exit" Kommando.
    Es will derzeit einfach nicht...:s

    Viele Grüße und vielen Dank

    André

  • Hallo zusammen,

    nun bin ich wieder ein Stück weiter. Es gibt nun nur noch folgende Meldung:


    pi@raspberryExperimental ~/Desktop $ sudo ./memwatch2-internet.sh
    ./memwatch2-internet.sh: Zeile 46: free * 100 / total : Division durch 0. (Fehlerverursachendes Zeichen ist \"total \").

    ...das Skript sieht an dieser Stelle derzeit so aus:


    while :;do

    total=`free | grep mem | tr -s '' | cut -d '' -f 2`
    free=`free | grep mem | tr -s '' | cut -d '' -f 4`
    available=$(( free * 100 / total ))
    echo -n "$available% of memory available -> "

    Jetzt frage ich mich, ob es ein Fehler in der Spaltenzuordnung ist, oder ein Skriptfehler insich ?

    Gebe ich mit den Zeichen "-f 2 und -f 4" die Zeile in der Spalte "Mem" vor ?

    Viele Grüße und vielen Dank

    André

Jetzt mitmachen!

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