![bash 脚本中的 -le 比较问题](https://linux22.com/image/815708/bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%20-le%20%E6%AF%94%E8%BE%83%E9%97%AE%E9%A2%98.png)
我在 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。请参阅我怎样才能用浮点数而不是整数来计算?