使用浮点数时出现语法错误

时间:2015-09-15 19:46:11

标签: bash floating-point syntax-error decimal

输入非整数时遇到语法错误,如3.4,2.1,3.9等。

有人可以指点我为什么吗?

提前致谢

  #!/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

2 个答案:

答案 0 :(得分:1)

shell不进行浮点运算(-ge仅支持)积分,所以

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

无法运作。您需要找到一种使用其他方法执行浮点比较的方法。这是asked before here.

答案 1 :(得分:0)

你可以在使用浮点数时使用awk / perl等,因为shell不支持它。

您可以按如下方式重写脚本。注意使用awk进行浮点比较。

#!/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