bash + 如何验证数字(浮点数或整数)是否小于整数 1

bash + how to verify if number ( float or integer ) is less then integer number 1

我的任务是验证 $VAL NUMBER could 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 脚本的一部分

使用 awk:

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

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

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

if [[ $(echo "$val < 1" | bc) == 1 ]]; then
    echo less than 1
fi

由于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