
Então não sei por que está fazendo isso. Minha instrução if continua interpretando a segunda variável como uma string literal em vez de uma variável. Abaixo está meu código exato.
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
}
Minha saída:
>lights
Characteristic value/descriptor: 00 00 00 00
Characteristic value/descriptor: 00 00 00 00
Characteristic value/descriptor: 00 00 00 00
Não entendo por que as duas últimas instruções de eco não estão sendo exibidas.
Editar: havia um espaço em branco no bulb1state. Isso é bom o suficiente para eu encontrar uma solução alternativa, mas ainda estou curioso para saber por que o segundo termo da instrução if estava sendo interpretado como uma string literal quando usei o operador "=" em oposição ao operador "-eq" . Também não importava qual variável era a primeira ou a segunda.
Responder1
Como comentei, você pode ter espaços extras na saída de gatttool
(ie $bulb1state
). Para a comparação você deve usar =
ou ==
(que são equivalentes), e para números -eq
, vejaesta resposta. Para ignorar os espaços extras que você pode fazer (vejaesta resposta):
if [[ "$bulb1state" = "$offstate"* ]]; then
#...
fi