bash 脚本中的 -le 比较问题

bash 脚本中的 -le 比较问题

我在 Ubuntu 11.10 下,当我在 bash 中执行该程序时出现以下错误:

exec.bash: line 25: [: 0.1: integer expected as an expression

第 25 行是:

while [ $p -le 1.0 ]

在以下情况下

p=0.1

while [ $p -le 1.0 ]
do
    echo ----probability---- $p
    java $jvmargs -classpath $CP jbenchmarker.MainSimulation $p
    (( p= $p + 0.1 ))
done

哪里有问题?

答案1

您的while循环可以用 for 循环代替。由于 Bash 无法处理浮点运算,因此您应该改用普通整数,并使用类似bc创建浮点数的程序。scale=1;之前的命令$i/10确保始终有一个小数(例如 0.1)。

for ((i=1; i<=10; i++))
do
    p=$(bc <<<"scale=1;$i/10")
    echo ----probability---- $p
    java $jvmargs -classpath $CP jbenchmarker.MainSimulation $p
done

这相当于:

i=1
while ((i<=10))
do
    p=$(bc <<<"scale=1;$i/10")
    echo ----probability---- $p
    java $jvmargs -classpath $CP jbenchmarker.MainSimulation $p
    ((i++))
done

command <<<...是一个巧妙的技巧,将 ... 写入标准输入command,相当于echo ... | command

答案2

Bash 不进行浮点运算;只进行整数运算。要与浮点数进行比较或计算,您必须使用外部命令,例如 bc 或 awk。请参阅我怎样才能用浮点数而不是整数来计算?

相关内容