在bashshell脚本中,如何将字符串转换为数字

在bashshell脚本中,如何将字符串转换为数字,bash,shell,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 现在我得到了预期的错误整数表达式,因为我正在尝试比较字符串 谢谢,Bash不懂浮点数。它只理解整数 您可以升级到功能更强大的脚本语言(Perl、Python、Ruby…),也可以通过bc或类似方式完成

嘿,我想把一个字符串转换成一个数字

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 
现在我得到了预期的错误整数表达式,因为我正在尝试比较字符串


谢谢,Bash不懂浮点数。它只理解整数


您可以升级到功能更强大的脚本语言(Perl、Python、Ruby…),也可以通过
bc
或类似方式完成所有计算。

bash语言的最佳特点是功能齐全的宏处理器,因此数字和字符串之间没有区别。问题是测试(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
你可以用bc

$ echo "0.8 > 0.7" | bc
1
$ echo "0.8 < 0.7" | bc
0
$ echo ".08 > 0.7" | bc
0
$echo“0.8>0.7”|公元前
1.
$echo“0.8<0.7”|公元前
0
$echo“.08>0.7”|公元前
0

因此,您可以在脚本中检查0或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

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

if ! echo "$x $y -p" | dc | grep > /dev/null ^-; then echo "$x > $y" else echo "$x < $y" fi 如果!echo“$x$y-p”| dc | grep>/dev/null^-;然后 回显“$x>$y” 其他的 回声“$x<$y” fi 您需要确保$x和$y是有效的(例如 仅包含数字和零或一个“.”)和, 根据您的dc的年龄,您可能需要 指定类似于“10k”的值以使其达到
识别非整数值。

以下是我的简单解决方案:


0.70和0.80不是整数。不完全正确。Bourne shell不知道整数,但Bash知道,通过“typeset-i”。
bc
是我所需要的。谢谢,鬼怪<代码>bc非常切碎。比bc更有效。它允许我使用变量,这是一项要求,而不是静态数字。非常感谢。简单明了。我必须学习bc来使用它,需要一个快速简单的解决方案!非常感谢。
 BaseLine=70.0         
 if [ $string \> $BaseLine ]
 then
      echo $string
 else
      echo "TOO SMALL"
 fi