Donc, je ne sais pas pourquoi il fait ça. Mon instruction if continue à interpréter la deuxième variable comme une chaîne littérale au lieu d'une variable. Voici mon code exact.
lights() {
bulb1state=$(gatttool -b D8:6F:4B:09:AC:E6 --char-read -a 0x001b)
echo $bulb1state
bulb2state=$(gatttool -b DA:5A:4B:09:AC:E6 --char-read -a 0x001b)
bulb3state=$(gatttool -b AC:E6:4B:07:39:E9 --char-read -a 0x0018)
bulb4state=$(gatttool -b AC:E6:4B:08:40:50 --char-read -a 0x0018)
offstate="Characteristic value/descriptor: 00 00 00 00"
echo $bulb1state
echo $offstate
if [ "$offstate" = "$bulb1state" ]; then
echo $bulb1state
echo "bulb1 state = off"
gatttool -b D8:6F:4B:09:AC:E6 --char-write -a 0x001b -n ff000000
gatttool -b DA:5A:4B:09:AC:E6 --char-write -a 0x001b -n ff000000
gatttool -b AC:E6:4B:07:39:E9 --char-write -a 0x0018 -n ff000000
gatttool -b AC:E6:4B:08:40:50 --char-write -a 0x0018 -n ff000000
fi
}
Ma sortie:
>lights
Characteristic value/descriptor: 00 00 00 00
Characteristic value/descriptor: 00 00 00 00
Characteristic value/descriptor: 00 00 00 00
Je ne comprends pas pourquoi les 2 derniers relevés d'écho ne s'affichent pas.
Modifier: Il y avait un espace blanc sur bulb1state. Cela me suffit pour trouver un travail, mais je suis toujours curieux de savoir pourquoi le deuxième terme de l'instruction if était interprété comme une chaîne littérale lorsque j'utilisais l'opérateur "=" par opposition à l'opérateur "-eq" . Peu importait également quelle variable était première ou seconde.
gatttool
(donc dans$bulb1state
).[ string1 = string2 ]
Est-ce que. le-eq
l'opérateur, d'autre part, les traiterait comme des entiers. Que vous attendiez-vous à faire?Réponses:
Comme je l'ai commenté, vous pourriez avoir des espaces supplémentaires dans la sortie de
gatttool
(c'est à dire.$bulb1state
). Pour la comparaison, vous devriez utiliser=
ou==
(qui sont des équivalents), et pour les nombres-eq
, voir cette réponse . Pour ignorer les espaces supplémentaires que vous pouvez faire (voir cette réponse ):la source