cat output no caso de if else instrução

1
os_version=$(cat /etc/issue |grep Ubuntu)
if $os_version
then
echo found
else
echo notfound
fi

Quando eu tentei em uma máquina Ubuntu, ele diz ./test: linha 2: Ubuntu: comando não encontrado notfound

Isso funciona para mim, mas eu quero atribuí-lo a uma variável

if cat /etc/issue |grep Ubuntu
then
echo found
else
echo notfound
fi
    
por HistoriaReiss 12.11.2018 / 13:18

2 respostas

7

A instrução if executa um comando e verifica seu status de saída. Usar $os_version como um comando funciona expandindo-o e executando a linha de comando resultante. Portanto, se a variável contiver Ubuntu 18.04.1 LTS \n \l , ele tentará executar um comando chamado Ubuntu com os argumentos 18.04.1 , LTS , etc.

Você provavelmente vai querer usar

if [ -n "$os_version" ]; then
    ...
fi

para verificar se a variável está vazia ou não ( [ -n "$var" ] é true se não estiver vazia, enquanto [ -z "$var" ] se a variável estiver vazia).

Como alternativa, você poderia usar o grep dentro da declaração if como você fez na edição e definir uma variável lá:

distro=unknown
if grep -q Ubuntu < /etc/issue; then
    distro=ubuntu
fi
# ... later
if [ "$distro" = ubuntu ]; then
    # do something Ubuntu-specific
fi
    
por 12.11.2018 / 13:37
3
grep -q Ubuntu /etc/issue && echo found || echo not found
    
por 12.11.2018 / 13:22