Problem mit while/do/then

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,
    Ich bin Raspberry Neuling und habe ein Problem mit folgenden Prog. aus dieser Anleitung
    http://nicht-traeumen-sondern-machen.de/RaspberryPi_Ba…SV.php?anker=c3


    #!/bin/sh

    gpio mode 0 in

    while true
    do

    result="$( gpio read 0 )"
    if [ "$result" = "1" ]; then
    #Versorgungsspannung ist ausgefallen, System runter fahren

    rm -rf ~/.local/share/Trash/files/* #Trashes Leeren

    sudo shutdown now #Runter Fahren


    fi
    sleep 0.5
    done

    es kommt beim Start immer die Meldung:
    /var/USV.sh: Zeile 14: Syntaxfehler beim unerwarteten Wort `then'
    /var/USV.sh: Zeile 14: `if[ "$result" = "1" ] ; then'

    weiters funktioniert auch dieser Autostart nicht

    Sudo crontab -e
    @reboot bash /var/USV.sh &

    den Pfad habe ich abgeändert da das Verzeichnis "www" nicht existiert, daran kann es wohl nicht liegen.

    Die gpio ports werden angesprochen, habe den gpio 1 mit einer Led beschalten und ein/ausschalten funktioniert.

    Mit besten Grüßen
    gerdl

  • In einer if ist es besser "$result" zu verwenden, siehe dazu: http://www.tldp.org/LDP/abs/html/comparison-ops.html

    bash ist aber auch etwas anders als sh. Die Dateiendung sagt nichts aus, dient nur der Übersicht. /bin/sh ist älter als /bin/bash und kann nicht so viel. Es ist auf jeden Fall besser bash zu verwenden.

    Es ist für bash zwar nicht notwenig, fördert aber die Lesbarkeit: Einrückungen.

    Schlecht zu lesen:

    Besser zu lesen:

    Desweiteren: Wenn das Script mit "sudo" ausgeführt wird, werden alle darin befindlichen Befehle ebenfalls als root ausgeführt und somit sind weitere 'sudo's überflüssig. Da das Script laut der Anleitung über "sudo crontab -e" in die Crontab des root Benutzers eingetragen wird, sind sämtliche sudo's überflüssig. Da das Script laut der Anleitung aber auch direkt an den Interpreter bash übergeben wird ist ein Shebang eigentlich überflüssig...

    Und last but not least wäre es effizienter sysfs zu verwenden, also die Dateien in /sys/class/gpio/ und somit auf zusätzliche/langsamere Programme wie "gpio" zu verzichten. Beispiel:

  • Danke mal an alle,
    ich habe mitlerweile nachstehende Anleitung gefunden die auch funktioniert, nur wenn beim Booten der gpio2 auf high ist funktioniert die automatische Anmeldung nicht .
    Ich werde es mal mit anderen gpios versuchen.

    Mit besten Grüßen
    Gerdl


    #!/bin/bash

    gpio mode 2 in
    while true
    do
    result="$( gpio read 2 )"
    if [ "$result" = "1" ]; then
    # Custom Code

    # in 60 min herunterfahren
    sudo shutdown -h 60 &

    # Custom Code Ende
    fi
    sleep 1
    done


  • nur wenn beim Booten der gpio2 auf high ist funktioniert die automatische Anmeldung nicht .

    Das hat nichts mit den GPIO an sich zu tun sondern wie du das Script in den "Autostart" eingebunden hast. Vermutlich so dass es den Bootvorgang blockiert. Ich vermute weiter das du das Script in /etc/rc.local eingetragen hast - füge dort einfach ein & ans Ende der Zeile ein sodass das Script in den Hintergrund geschickt wird und nicht darauf gewartet wird bis es beendet ist (blockiert)

Jetzt mitmachen!

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