在bash shell脚本中如何将字符串转换为数字

时间:2009-11-23 23:49:40

标签: bash shell

嘿我想将字符串转换为数字

x="0.80"

#I would like to convert x to 0.80 to compare like such:
if[ $x -gt 0.70 ]; then

echo $x >> you_made_it.txt 

fi 

现在我得到错误整数表达式,因为我试图比较一个字符串。

感谢

7 个答案:

答案 0 :(得分:14)

你可以使用bc

$ echo "0.8 > 0.7" | bc
1
$ echo "0.8 < 0.7" | bc
0
$ echo ".08 > 0.7" | bc
0

因此您可以在脚本中检查0或1。

答案 1 :(得分:3)

出于某种原因,这个解决方案吸引我:

if ! echo "$x $y -p" | dc | grep > /dev/null ^-; then
  echo "$x > $y"
else
  echo "$x < $y"
fi

您需要确保$ x和$ y有效(例如 只包含数字和零或一个'。')和, 取决于您的直流电压的年龄,您可能需要 指定类似“10k”的东西来获取它 识别非整数值。

答案 2 :(得分:2)

Bash不理解浮点数。它只能理解整数。

您可以升级到更强大的脚本语言(Perl,Python,Ruby ......),也可以通过bc或类似的方式进行所有数学运算。

答案 3 :(得分:1)

使用awk

x="0.80"
y="0.70"
result=$(awk -vx=$x -vy=$y 'BEGIN{ print x>=y?1:0}')
if [ "$result" -eq 1 ];then
    echo "x more than y"
fi

答案 4 :(得分:1)

如果您的值保证在相同的格式和范围内,您可以进行字符串比较:

if [[ $x > 0.70 ]]
then
    echo "It's true"
fi

如果x为“.8”(无前导零),则会失败。

然而,虽然Bash不理解小数,但它的内置printf可以格式化它们。所以你可以用它来规范你的价值观。

$ x=.8
$ x=$(printf %.2 $x)
$ echo $x
0.80

答案 5 :(得分:0)

bash语言最好被描述为一个功能齐全的宏处理器,因此数字和字符串之间没有区别。问题是test(1)适用于整数。

答案 6 :(得分:0)

这是我的简单解决方案:

 BaseLine=70.0         
 if [ $string \> $BaseLine ]
 then
      echo $string
 else
      echo "TOO SMALL"
 fi