Probleme mit if, then, else im Script

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Probleme mit if, then, else im Script

      Hallo,

      ich möchte einem vorhanden Script die powerstate Abfrage voran stellen. Das funktioniert soweit auch.

      instandby=$(wget -qO - powerstate |grep '</e2instandby>' | sed -e 's/<\/e2instandby>//g' | sed -e 's/false/on/g' | sed -e 's/true/off/g')

      liefert je nach Zustand on oder off. Allerdings kriege ich kein nachfolgendes if, then, else hin.

      if [ "$instandby" ] = [ "on" ]
      then
      wget -q -O - 'http://vuuno4kse/web/message?text=test&type=2&timeout=10'

      Damit passiert nichts. Hat jemand einen Tip für mich, wo liegt mein Fehler?

      mfg
    • Mal so probiert

      if [ "$instandby" ] = [ "on" ] ; then
      wget -q -O - 'http://vuuno4kse/web/message?text=test&type=2&timeout=10'
      fi
      Wer einfach Danke sagen und meine Projekte unterstützen möchte: Amazon-Gutschein an - thomas.siegel@ts-myinter.net - ist immer herzlich Willkommen!
      Projekte : VuMatic-Smarthome-Center, VWeather3, AdvancedEventLibrary, TVDbInfo
    • und evt. mal den Befehl abändern in :
      wget 'http://vuuno4kse/web/message?text=test&type=2&timeout=10'
      Wer einfach Danke sagen und meine Projekte unterstützen möchte: Amazon-Gutschein an - thomas.siegel@ts-myinter.net - ist immer herzlich Willkommen!
      Projekte : VuMatic-Smarthome-Center, VWeather3, AdvancedEventLibrary, TVDbInfo
    • @rdamas

      schmetty2 schrieb:

      liefert je nach Zustand on oder off
      Nur mal so für nen wissensdurstigen Anfänger. Für was steht denn jeweils das x in [ "x$instandby" = "xon" ] ?
      Wer einfach Danke sagen und meine Projekte unterstützen möchte: Amazon-Gutschein an - thomas.siegel@ts-myinter.net - ist immer herzlich Willkommen!
      Projekte : VuMatic-Smarthome-Center, VWeather3, AdvancedEventLibrary, TVDbInfo
    • Damit kein Leerstring verglichen werden muss, wird auf beiden Seiten ein "x" am Argument hinzugefügt. Oder ein anderes Zeichen, wie du magst. Das ist hilfreich, vor allem wenn mal wieder nicht klar ist, welche Shell den Test am Ende durchführt. Da gibt es leider subtile Unterschiede - das mit dem zusätzlichen Zeichen im String funktioniert aber aus meiner Erfahrung so gut wie immer.
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.
    • Danke für Eure Tips.
      Aber leider poppt die Messagebox immer noch nicht auf.
      Hab's auch mal mit den urprünglichen false und true probiert, kommt auch nix.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von schmetty2 ()

    • Kommt denn die Message hoch, wenn Du die Überprüfung mal testweise weglässt und nur
      wget -q -O - 'http://vuuno4kse/web/message?text=test&type=2&timeout=10'
      eingibst?
      Wer einfach Danke sagen und meine Projekte unterstützen möchte: Amazon-Gutschein an - thomas.siegel@ts-myinter.net - ist immer herzlich Willkommen!
      Projekte : VuMatic-Smarthome-Center, VWeather3, AdvancedEventLibrary, TVDbInfo
    • Was steht in $instandby ?
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------
      KAPIERVORGANG beendet.

      Zubehör : Philips 46PFL-9705 / 37PFL-9604, Samsung HT-E6759W, Samsung SPF 107H-105P-87H, Qnap TS-253A, Harmony 650, Fritzbox 7490, Cisco WAP4410N, Netgear M4100-D12G, TPLink HS100/HS110/LB110
    • schmetty2 schrieb:

      instandby=$(wget -qO - powerstate |grep '</e2instandby>' | sed -e 's/<\/e2instandby>//g' | sed -e 's/false/on/g' | sed -e 's/true/off/g')
      ist das ein Tippfehler? Fehlt da nicht ein Bindestrich vor dem O?

      instandby=$(wget -q -O - powerstate |grep '</e2instandby>' | sed -e 's/<\/e2instandby>//g' | sed -e 's/false/on/g' | sed -e 's/true/off/g')
      Wer einfach Danke sagen und meine Projekte unterstützen möchte: Amazon-Gutschein an - thomas.siegel@ts-myinter.net - ist immer herzlich Willkommen!
      Projekte : VuMatic-Smarthome-Center, VWeather3, AdvancedEventLibrary, TVDbInfo
    • Wäre jetzt auch mein Verdacht, dass da nicht "on" drin steht, sondern evtl. noch Leerzeichen und Leerzeile.

      Versuch mal, hinter dem letzten sed in der Zeile wo du instandby liest, noch ein "| xargs" dran zu setzen, um die Leerzeichen wegzubekommen. Vielleicht tut's das schon. Ansonsten vielleicht das Shell-Script mit -x starten, um zu schauen was da passiert.

      Edit: @tsiegel: das ist kein Tippfehler, -qO ist kurz für -q -O.
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von rdamas ()

    • Man lernt halt täglich was dazu. :)
      Wer einfach Danke sagen und meine Projekte unterstützen möchte: Amazon-Gutschein an - thomas.siegel@ts-myinter.net - ist immer herzlich Willkommen!
      Projekte : VuMatic-Smarthome-Center, VWeather3, AdvancedEventLibrary, TVDbInfo
    • Und so:??

      Shell-Script

      1. #!/bin/bash -x
      2. ## das -x ist für Debugausgaben
      3. instandby=$(wget -O - -q http://IP-der-Box/web/powerstate | grep "\(<\|</\)e2instandby" | tr -d '\n' | sed "s/.*<e2instandby>\(.*\)<\/e2instandby.*/\\1\n/g")
      4. if [ $instandby == "true" ]; then
      5. echo "Box ist im Standby"
      6. elif [ $instandby == "false" ]; then
      7. echo "Box ist nicht im Standby"
      8. else
      9. echo "Box ist nicht erreichbar"
      10. fi
      Alles anzeigen
    • Wenn du noch um ein tr bei der Variablenbildung erweiterst, kannst du die Variablen im if else Bereich auch in Anführungszeichen schreiben.

      Shell-Script

      1. #!/bin/bash -x
      2. instandby=$(wget -O - -q http://IP-der-Box/web/powerstate | grep "\(<\|</\)e2instandby" | tr -d '\n' | sed "s/.*<e2instandby>\(.*\)<\/e2instandby.*/\\1\n/g" | tr -d '[:space:]')
      3. if [ "$instandby" == "true" ]; then
      4. echo "Box ist im Standby"
      5. elif [ "$instandby" == "false" ]; then
      6. echo "Box ist nicht im Standby"
      7. else
      8. echo "Box ist nicht erreichbar"
      9. fi
      Alles anzeigen

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jones1024 ()

    • schmetty2 schrieb:

      So,
      jetzt gehen gar keine wget Befehle mehr.
      Das Phänomen verstehe ich nicht. Erstelle ich eine neue Scriptdatei, läuft das Script nicht. Nehme ich die Kopie eines vorhanden, welches schon auf der Box läuft, gehts.
      Das selbe hatte ich schon mal Python Scripten auf'm Androiden, deshalb viel mir das wieder ein.
      Jedenfalls geht es jetzt. Allerdings nicht ohne "elif" Auch mit der Messagebox.

      Danke

      Shell-Script

      1. #!/bin/sh
      2. instandby=$(wget -qO - http://IP/web/powerstate |grep '</e2instandby>' | sed -e 's/<\/e2instandby>//g' | sed -e 's/false/no/g' | sed -e 's/true/yes/g')
      3. sleep 5
      4. if [ $instandby == "yes" ]; then
      5. wget -q -O - http://IP/web/remotecontrol?command=116
      6. elif [ $instandby == "no" ]; then
      7. wget -q -O - http://IP/web/remotecontrol?command=139
      8. else
      9. echo
      10. fi
      Alles anzeigen
    • Ne,
      sind alle auf 755
      Auserdem würde beim Erstellen eines CronJobs die Fehlemeldung" kann nicht ausgeführt werden" oder so ähnlich kommen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von schmetty2 ()