0

Im getting syntax error when typing non-integers like, 3.4, 2.1, 3.9, etc.

Could anyone please point me why?

Thanks in advance

  #!/bin/bash

  while echo "Informar valores"
  do
  valorbase=$(echo "8" | bc)
  valor1=0
  valor2=0
  valor3=0
  echo "Digite um valor abaixo"
  read valor1
  valordasoma=$(echo "scale=3; $valor1+$valor2" | bc)
  echo "Digite um valor abaixo"
  read valor2
  valordasoma=$(echo "scale=3; $valor1+$valor2" | bc)
  echo "Digite um valor abaixo"
  read valor3
  valordasoma=$(echo "scale=3; $valor1+$valor2+$valor3" | bc)
  echo $valordasoma
  if [[ $valordasoma -ge $valorbase ]]; then
    echo "Valor da soma > que, ou = ao valor base"
    echo "Repete comando para a linha"
  elif [[ $valordasoma -lt $valorbase ]]; then
    echo "Continua exibindo os campos valor ate que a soma seja igual ao valor base"
  else
    echo "continua o script para o restante das linhas"
fi
done
Jens
  • 69,818
  • 15
  • 125
  • 179
ebvogt
  • 43
  • 10

2 Answers2

1

The shell does not do floating point arithmetic (-ge only supports) integrals, so

if [[ $valordasoma -ge $valorbase ]]; then

can't work. You would need to find a way using some other way to perform floating point comparisons. This has been asked before here.

Community
  • 1
  • 1
Jens
  • 69,818
  • 15
  • 125
  • 179
0

You can use awk/perl etc while working with floats since shell does not support it.

You can rewrite your script as below. Note use of awk for float comparison.

#!/bin/bash

while echo "Informar valores"
do
valorbase=$(echo "8" | bc)
valor1=0
valor2=0
valor3=0
echo "Digite um valor abaixo"
read valor1
valordasoma=$(echo "scale=3; $valor1+$valor2" | bc)
echo "Digite um valor abaixo"
read valor2
valordasoma=$(echo "scale=3; $valor1+$valor2" | bc)
echo "Digite um valor abaixo"
read valor3
valordasoma=$(echo "scale=3; $valor1+$valor2+$valor3" | bc)
echo $valordasoma
var=$(awk -v  o1=$valordasoma  -v t1=$valorbase 'BEGIN { print (o1 >= t1)?"1":"0" }')
if [ "$var" -eq 1  ]; then
  echo "Valor da soma > que, ou = ao valor base"
  echo "Repete comando para a linha"
elif [ "$var" -eq 0 ]; then
  echo "Continua exibindo os campos valor ate que a soma seja igual ao valor base"
else
  echo "continua o script para o restante das linhas"
fi
done
Shubhangi
  • 2,229
  • 2
  • 14
  • 14
  • In first place thanks for your help. Could you please try explaining what you did? – ebvogt Sep 16 '15 at 00:41
  • I used awk scriptlet for float comparison , variable var will be assigned value 1 if (valordasoma >= valorbase) , else 0. Then replaced your if condition [ $valordasoma -ge $valorbase ] by [ "$var" -eq 1 ] and [ $valordasoma -lt $valorbase] by [ "$var" -eq 0 ] . – Shubhangi Sep 16 '15 at 18:38