使用浮点数时出现语法错误
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
我在键入 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