Sua comparação é correta e idiomática. Código Bash.
Tente inserir echo "switch='$switch'"
antes do if
para ver quais são os conteúdos das variáveis a cada vez.
Estou tentando comparar duas strings em uma instrução if. No entanto, a comparação não parece estar funcionando corretamente, pois o programa passa a primeira condição toda vez.
#!/bin/bash
switch=$(ssh 192.168.14.10 egrep somefile /tmp/tmpfile.txt)
if [ "$switch" == "tmp" ]; then
echo "expected output"
else
echo "unexpected output"
fi
A saída vai para "saída esperada" todas as vezes. Eu até tentei mudar a primeira condição para ser "!=" Mas chega à primeira afirmação ainda.
Sua comparação é correta e idiomática. Código Bash.
Tente inserir echo "switch='$switch'"
antes do if
para ver quais são os conteúdos das variáveis a cada vez.
Altere a primeira linha de:
switch=$(ssh 192.16810.10.10 egrep somefile /tmp/tmpfile.txt)
Para o seguinte:
export switch=$(ssh 192.16810.10.10 egrep somefile /tmp/tmpfile.txt)
Eu encontrei um problema quase idêntico muitas vezes antes, ou quando incrementando uma variável. Em que variable=$variable++
ou variable=$variable+1
acrescentaria a sequência de texto "+1"
ou "++"
ao final sempre que fosse em loop em vez de incrementar como deveria.
O uso de let variable=$variable++
ou let variable=$variable+1
corrigiu o problema imediatamente. Usar export
também funcionou se tudo foi definido antes do início do loop.
Eu acredito que o bash está fazendo algo errado quando armazena essa variável. Assim, faz a comparação agir, e usar let / export faz algo diferente para armazená-la. Eu estava procurando por uma resposta para a mesma pergunta, exceto que eu estava obtendo resultados inconsistentes comparando números em vez de strings. De qualquer forma, não custa nada tentar usar a exportação antes da primeira declaração, e espero que isso ajude.
Eu começaria excluindo espaços espúrios:
if [ "$(printf "%s" "$switch"| tr -d " ")" = tmp ]; then
Se ainda não obtiver êxito, adicione as duas linhas antes do teste. Se a saída for diferente, corrija seu teste.
echo tmp | od -c
echo "$switch" | od -c