Eu acho que seu problema pode ser alguns problemas com a comparação de floats e strings.
AFAIK, teste não pode lidar com valores flutuantes, então seu teste para $value3 = 14.04 dará a você syntax error: invalid arithmetic operator (error token is ".04") .
Você poderia apenas tratar os números como String assim:
elif [[ "$value3" == "14.04" ]]; then
Observe também as aspas em torno de $value3 , que também é necessário para tratar o 7.8 , que foi retornado no meu caso do debian 7.8, como string.
Se você quiser comparar apenas o número da versão principal, também poderá retirar a parte depois do ponto:
value3=$(lsb_release -sr | cut -d. -f1)
Isso dividirá a string retornada por lsb_release -sr no . que definimos como delimitador com o parâmetro -d. e, em seguida, selecionará a primeira coluna do resultado com -f1 .
Isso também funciona com value4:
value4=$(cat /etc/debian_version | cut -d. -f1)
Isso corta a saída do meu /etc/debian_version que foi 7.8 antes e 7 depois de adicionar o cut .
Você também pode querer suprimir avisos de arquivos inexistentes. Eu não tenho um sistema de redhat disponível, então eu redirecionei as mensagens de erro dos dois primeiros comandos para /dev/null desta forma:
value1=$(cat /etc/redhat-release 2> /dev/null | awk '{ print $4 }' | cut -c 1 )
Deixe-me saber se você precisar de alguma outra ajuda. Além disso, adicione algumas saídas e talvez até as saídas esperadas do seu script para que possamos ver onde está o seu problema.