Bash if-check não funciona [duplicado]

-3

Eu quero comparar strings no Bash usando if declarações, mas não funciona:

#!/bin/bash
os='lsb_release -r | sed 's/.*://''
echo $os
if [ $os="16.04" ]
then
echo "g"
elif [ $os="14.04" ]
then
echo "b"
else
echo "c"
fi
    
por sysadmincrispy 20.02.2018 / 10:03

1 resposta

6

No test do Bash (sinônimo para [ ... ] ) embutido, e também para as expressões [[ ... ]] geralmente preferíveis, você deve separar todos os argumentos e operadores com espaços.

Além disso, você deve sempre citar suas variáveis. Também é recomendável usar o recuo para tornar seu código mais legível e usar a sintaxe de substituição de processo de novo estilo $(...) em vez de '...' .

Ah, e lsb_release tem uma opção -s ou --short para omitir a primeira coluna, você não precisa analisá-la com sed .

Poderia aparecer, por exemplo assim:

#!/bin/bash
os=$(lsb_release -rs)
echo "$os"
if [[ "$os" = "16.04" ]] ; then
    echo "g"
elif [[ "$os" = "14.04" ]] ; then
    echo "b"
else
    echo "c"
fi

Por outro lado, para comparar uma variável com vários valores, case pode ser mais bonito :

#!/bin/bash
os=$(lsb_release -rs)
echo "$os"
case "$os" in
    "16.04") echo "g" ;;
    "14.04") echo "b" ;;
    *) echo "c" ;;
esac
    
por Byte Commander 20.02.2018 / 10:43