嘿我想将字符串转换为数字
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
现在我得到错误整数表达式,因为我试图比较一个字符串。
感谢
答案 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