Problemas com decimais em Comandos de Decisão

Iniciado por rickynunes, 06 de Outubro de 2013, 11:54

tópico anterior - próximo tópico

rickynunes

Fala galerinha, então to com outro problema que ta me dando dor de cabeça já!
Tenho que fazer outro exercício, assim, tenho que criar um script que calcule o IMC da pessoa e com Comandos de Decisão informar se ela é magra, tem peso ideal, esta acima do peso ou é obesa.
Beleza, fiz esse script:

#!bin/bash
#Calculo de IMC.
echo "Insira sua altura em metros:"
read h
echo "Insira seu peso em kg:"
read p
imc=$(echo "scale=2; $p/$h^2" | bc)
if [ $imc -le "18.5" ]
then
echo "Seu IMC é $imc, vc esta magro."
elif [ $imc -le 25 ]
then
echo "Seu IMC é $imc, vc esta no peso ideal."
elif [ $ imc -le 30 ]
then
echo "Seu IMC é $imc, vc esta acima do peso."
elif [ $imc -gt 30 ]
then
echo "Seu IMC é $imc, vc esta obeso."
fi

Só que pelo resultado ser em decimais da o erro: "esperado expressão de numero inteiro"
Meu problema é que preciso desse "scale", porque  o IMC precisa ser baseado em decimais, mesmo se não usar o "scale" na condição com o 18.5 da o mesmo problema.

HELP PLX!!

irtigor

O bc continua sendo uma opção, ele vai retornar 0 pra falso e 1 pra verdadeiro, em comparações, então:


if [[ $(bc <<< "$imc < 18.5") -eq 1 ]]; then
  echo "Seu IMC é $imc, vc esta magro."
fi


Obs: use a tag code, pra facilitar a leitura.

rickynunes

Citação de: irtigor online 06 de Outubro de 2013, 12:51
O bc continua sendo uma opção, ele vai retornar 0 pra falso e 1 pra verdadeiro, em comparações, então:


if [[ $(bc <<< "$imc < 18.5") -eq 1 ]]; then
  echo "Seu IMC é $imc, vc esta magro."
fi


Obs: use a tag code, pra facilitar a leitura.
tem que executar exatamente assim? funcionou não, acho que não fiz direito!

irtigor

Em essência, sim: vai executar alguma coisa e olhar o retorno. Mas existem várias formas de aplicar, mostre exatamente o que fez, o que aconteceu e o que você esperava no lugar.