Se instruções no bash Linux

0

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.

    
por keyboard_solo 06.12.2016 / 00:39

3 respostas

0

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.

    
por 06.12.2016 / 01:18
0

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.

    
por 06.12.2016 / 02:23
0

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
    
por 06.12.2016 / 04:21

Tags