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

Syntax error when working with floating point numbers

我在键入 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

shell不做浮点运算(-ge只支持)积分,所以

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

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

您可以在使用浮点数时使用 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