Rückgabe eines Befehls

Diskutiere Rückgabe eines Befehls im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Hallo zusammen, Ich habe ein Relais das ich über einen UDP Befehl steuern möchte. Ich nutze dafür den Paketsender. Ich sende einen Ascii Befehl...

  1. #1 Gerdi_666, 26.11.2017
    Gerdi_666

    Gerdi_666 Grünschnabel

    Dabei seit:
    24.11.2017
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo zusammen,

    Ich habe ein Relais das ich über einen UDP Befehl steuern möchte. Ich nutze dafür den Paketsender. Ich sende einen Ascii Befehl raus der dann in Hex Daten zurück gibt. Ein Befehl ist z.B. das lesen des aktuellen Zustands des Relais. Hier sende ich in Ascii einfach “read2“. Als Antwort erhalte ich dann “6F 66 66 32“, also immer mit Leerzeichen dazwischen. Dies heisst dann Zustand OFF2. Die Zahl ist die Nummer des Relais. Jetzt wollte ich das in einem Script automatisieren. Ich will den Zustand abfragen und dann irgendwas tun. Mein Problem ist das ich mit meiner IF Anweisung die Rüchgabe irgendwie nicht auswerten kann. Mein Script sieht so aus aktuell:

    #!/bin/bash
    Test=$(/home/pi/PacketSender-5.5.1/src/PacketSender -uaqw 500192.168.178.210)
    Response='6F 66 66 32'

    if [[ $Test = $Response ]]; then
    #Wenn Relais aus ist das Relais einschalten
    /home/pi/PacketSender-5.5.1/src/PacketSender -uaqw 500 192.168.178.210

    else
    echo Das Relais ist bereits angeschaltet
    fi

    Ich habe auch schon folgendes probiert:

    if [[ $Test -eq '6F 66 66 32' ]]; then
    oder

    if [[ $Test == $Response ]]; then
    oder

    if [[ $Test == '6F 66 66 32' ]]; then

    Aber irgendwie läuft er immer in den else Zweig. Wenn ich mir $Test über echo ausgeben lasse habe ich aber genau die Rückmeldung für mein IF-Zweig 6F 66 66 32.


    Was mache ich hier falsch? Kann mir jemand helfen?

    Danke
     
  2. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.160
    Zustimmungen:
    15
    ohne es ausprobiert zu haben - pack beide Variablen in Quotes.
     
  3. #3 Gerdi_666, 26.11.2017
    Gerdi_666

    Gerdi_666 Grünschnabel

    Dabei seit:
    24.11.2017
    Beiträge:
    3
    Zustimmungen:
    0
    Meintest du so?

    if [[ '$Test' = '$Response' ]]; then

    Leider kein Erfolg.
     
  4. Krotti

    Krotti Foren As

    Dabei seit:
    01.03.2007
    Beiträge:
    79
    Zustimmungen:
    0
    Du musst doppelte Anführungszeichen (double quotes) verwenden:
    Code:
    #!/bin/bash
    
    STR1="6F 66 66 32"
    STR2="6F 66 66 32"
    
    if [ "$STR1" == "$STR2" ]
    then
        echo "Strings are equal"
    else
        echo "Strings are not equal"
    fi
    Bei einfachen Anführungszeichen werden die Variablen nicht expandiert.
     
  5. #5 Gerdi_666, 26.11.2017
    Gerdi_666

    Gerdi_666 Grünschnabel

    Dabei seit:
    24.11.2017
    Beiträge:
    3
    Zustimmungen:
    0
    Ich habe jetzt den Code von dir 1zu1 getestet. Dieser funktioniiert. Sobald ich aber dem STR1 den Rückgabewert des Kommandos zu weise, geht es nicht mehr....
    Ich habe jetzt folgendes getestet:

    Code:
    #!/bin/bash
    
    STR1=$(/home/pi/PacketSender-5.5.1/src/PacketSender -uAqw 500 192.168.178.210 5000 "read2")
    
    STR2="6F 66 66 32"
    
    echo -e "$STR1"
    echo -e "$STR2"
    
    if [ "$STR1" == "$STR2" ]
    then
        echo -e "Strings are equal"
    else
        echo -e "Strings are not equal"
    fi
    

    Meine Ausgabe im Terminal ist dann folgende:


    6F 66 66 32
    6F 66 66 32
    Strings are not equal


    Beide Strings sehen hier gleich aus, aber ich denke die Rückgabe der Funktion ist vielleicht in HEX. Kann das das Problem sein?
     
  6. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.160
    Zustimmungen:
    15
    ... dann solltest Du sicherheitshalber auch bei der Zuweisung an STR quoten - also a="$()"...
     
  7. #7 hellfire, 26.11.2017
    hellfire

    hellfire Foren As

    Dabei seit:
    25.05.2016
    Beiträge:
    97
    Zustimmungen:
    12
    Ganz nebenbei bemerkt:

    Das da ...

    Code:
    if [ ... ] ...
    ist etwas anderes als das da ...

    Code:
    if [[ ... ]] ...
    Aus der Bash Man-page:

    Code:
           [[ expression ]]
                  Return  a  status  of  0  or 1 depending on the evaluation of the
                  conditional expression expression.  Expressions are composed 
                  of the primaries described below under CONDITIONAL
                  EXPRESSIONS.  Word splitting and pathname expansion are 
                  not performed on the words between the [[ and ]]; tilde expansion, 
                  parameter and variable  expansion,  arithmetic  expansion, 
                  command substitution, process substitution, and quote removal 
                 are performed.  Conditional operators such as -f must be unquoted 
                 to be recognized as primaries.
    
     
  8. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.160
    Zustimmungen:
    15
    ... und noch nebenbeier - ggf. auch mal nach "Bash Tutorial" oder artverwandtem googlen...
     
Thema:

Rückgabe eines Befehls

Die Seite wird geladen...

Rückgabe eines Befehls - Ähnliche Themen

  1. ersetzen in einem Rückgabestring eines vorher ausgeführten Programms

    ersetzen in einem Rückgabestring eines vorher ausgeführten Programms: Hallo liebe Shell Spezialisten! Ich habe mich soeben erst hier angemeldet, da ich seit gestern abend an einem für mich großen Problem sitze und...
  2. tcpdump Rückgabe auswerten

    tcpdump Rückgabe auswerten: tcpdump Rückgabe auswerten --- Gelöst Hallo zusammen, erstmal danke für diese häufig hilfreichen Threads. Hat mir in meiner Linux / Unix...
  3. Rückgabe von falschen wert

    Rückgabe von falschen wert: Hallo zusammen, bin neu im unix umfeld!:( habe folgendes Problem und hoffe bin hier an der richtigen adresse. Ich führe aus java heraus ein...
  4. Asus: Keine höhere Rückgabe bei Linux

    Asus: Keine höhere Rückgabe bei Linux: Laut Aussage des Elektronikhersteller Asus halten sich bei dem Unternehmen die Rückgabequoten von Linux- und Windows-XP-Geräten die Waage....
  5. Asus: Keine höhere Rückgabe bei Linux

    Asus: Keine höhere Rückgabe bei Linux: Laut Aussage des Elektronikhersteller Asus halten sich bei dem Unternehmen die Rückgabequoten von Linux- und Windows-XP-Geräten die Waage....