【问题标题】:bash + how to verify if number ( float or integer ) is less then integer number 1 [duplicate]bash +如何验证数字(浮点数或整数)是否小于整数1 [重复]
【发布时间】:2021-04-19 11:52:49
【问题描述】:

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

【问题讨论】:

    标签: python bash dc


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      使用 awk:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2013-09-14
          • 1970-01-01
          • 2012-03-08
          • 2013-05-04
          • 2016-06-27
          • 2023-04-07
          • 2019-03-16
          • 1970-01-01
          • 2015-11-30
          相关资源
          最近更新 更多