Rückgabe eines Befehls

Gerdi_666

Grünschnabel
Beiträge
3
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
 

marce

Kaiser
Beiträge
1.298
ohne es ausprobiert zu haben - pack beide Variablen in Quotes.
 

Krotti

Foren As
Beiträge
79
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.
 

Gerdi_666

Grünschnabel
Beiträge
3
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?
 

marce

Kaiser
Beiträge
1.298
... dann solltest Du sicherheitshalber auch bei der Zuweisung an STR quoten - also a="$()"...
 

hellfire

Doppel-As
Beiträge
129
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.
 

marce

Kaiser
Beiträge
1.298
... und noch nebenbeier - ggf. auch mal nach "Bash Tutorial" oder artverwandtem googlen...
 

Ähnliche Themen

HandbrakeCLI Shell Skript

verzeichniss suche funktioniert nicht

KSH: Problem beim Umleiten des Fehlerkanals

nach ssh-login auswerte ob passwortabfrage komt oder nicht

Escaping-Problem

Neueste Themen

Oben