Como verificar a variável retornada do MySQL no bash?

2

Eu preciso executar um procedimento armazenado usando o MySQL do bash. O procedimento armazenado retorna uma variável e eu preciso verificar o valor da variável no bash para exibi-la de acordo. Se eu fizer o eco da variável diretamente, ela exibirá o valor corretamente, mas se eu verificar o valor usando if , a condição if nunca será satisfeita e não obtenho 'YES' exibido no seguinte caso.

Para simplificar, simplifiquei o arquivo bash assim:

result=$(mysql -h localhost -u$MYSQL_USER -p$MYSQL_PASSWORD -s -e "set @myVarible = 'YES';select @myVarible" $MYSQL_DATABASE)

if [[ $result == 'YES' ]] ; then
    echo YES
fi

A saída de echo -n "$result" | od -ctx1 é

0000000   Y   E   S  \r
         59  45  53  0d
0000004
    
por Victor 03.11.2014 / 20:34

1 resposta

0

Sua saída de echo -n "$result" | od -ctx1 mostra que sua variável result está ficando um retorno de carro preso no final. (Isso é mostrado como \r e 0d na saída od -ctx1 .) No que diz respeito a ninguém, esse é apenas outro personagem, e não corresponde a YES mais do que YESK ou YESS . Indiscutivelmente a melhor solução para o seu problema é mudar o seu comando mysql não para produzir o retorno de carro. Mas eu não sei como fazer isso e sei como consertar o resultado depois que você o colocou no shell.

Após o comando mysql , diga

result="${result%$'\r'}"

A construção

${ variable_name % string }

(onde os espaços são adicionados para maior clareza) se expande para o valor da variável, com a string removida do final. Por exemplo, se $vehicle for carriage , então ${vehicle%riage} será car .

$' string '

é o mesmo que 'string' (uma string entre aspas) exceto que a string pode conter seqüências de escape, como \t para Tab e \r para retorno de carro. Portanto, ${result%$'\r'} é o valor de $result com um retorno de carro removido do final. Agora você deve poder testá-lo com código como [[ $result == 'YES' ]] .

    
por 04.11.2014 / 21:19

Tags