0

我的任务是验证$VALNUMBERcould be float or integer是否小于 1

我做了

val=0.999
[[ $val -lt 1 ]] && echo less then 1
-bash: [[: 0.999: syntax error: invalid arithmetic operator (error token is ".999")

比较任何$val数字(浮点数或整数)并在值小于1时对其进行测试的正确方法是什么?

解决方案也可以使用 Perl/Python line linear ,这将成为我的 bash 脚本的一部分

4

3 回答 3

1

使用bc. 将要计算的表达式写入bc的标准输入,它将输出结果。在这种情况下,布尔表达式将产生 0 如果为假,则为 1 如果为真。

if [[ $(echo "$val < 1" | bc) == 1 ]]; then
    echo less than 1
fi
于 2021-01-14T13:41:10.610 回答
1

由于 shell 本身不能对浮点数执行操作,因此 bc通常用于此目的。在您的情况下,它将是:

#!/usr/bin/env bash

val=0.999
if [ "$(bc <<< "$val < 1")" -eq 1 ]
then
    echo less than 1
fi

并且由于您特别询问了 Perl/Python,这就是您在 Python 中将如何做到这一点:

#!/usr/bin/env bash

val=0.999
if [ "$(python3 -c "print(1) if $val < 1 else print(0)")" -eq 1 ]
then
    echo less than 1
fi

最后,Perl:

#!/usr/bin/env bash

val=0.999
if perl -e'exit $ARGV[0] < 1' "$val"
then
    echo less than 1
fi
于 2021-01-14T13:52:03.273 回答
1

使用 awk:

awk -v val=$val 'val < 1 { print "less that 1" }' <<< /dev/null

使用 -v 将变量 $val 传递给 awk,然后当它小于 1 时,打印“小于 1”

于 2021-01-14T13:02:07.093 回答