Bash 脚本 "integer expression expected" ,在 bash 中使用浮点数而不是其他语言

Bash Script "integer expression expected" , use of floats in bash instead of other language

我是 bash 脚本的新手。我的代码是:

MK=M
SM=1.4

if [[ $MK == "M" ]]
 then
        if [ $SM -gt 1.3 ]
            then
            echo "Greater than 1.3M"
            else
            echo "Less than 1.3M"
            fi
 else
 echo "Not yet M...."
fi

回复:

/tmp/tmp.sh: line 6: [: 1.4: integer expression expected
Less than 1.3M

我做错了什么?

man bash 是这样说的:

arg1 OP arg2 ... Arg1 and arg2 may be positive or negative integers.

您似乎在尝试比较浮点数。

归根结底是因为 bash 对浮点数不是很有耐心。在这里用非常简单的术语来说,我建议您做以下两件事之一:

  1. 您似乎在尝试确定某些内容是否大于 1.3 Mb,是否正确?如果是这种情况,请保留所有内容,只需将 Kb 用于 $sm 和比较

    像这样:

    #/bin/bash
    
    mk="p"  
    km="p"  
    sm="1400"  
    ms="1300"  
    
    if [[ $mk == $km ]]  
    then  
    if [ $sm > $ms ]  
    then  
    echo "Greater than 1.3M"  
    else  
    echo "Less than 1.3M"  
    fi  
    else  
    echo "Not yet M...."  
    fi
    

  2. 使用bc计算浮点数...

    # /bin/bash
    
    mk="p"
    km="p"
    sm="1.4"
    ms="1.3"
    
    if [ $(echo "$mk == $km" | bc) ]
    then   
    if [ $(echo "$sm > $ms" | bc) ]
    then
    echo "Greater than 1.3M"
    else
    echo "Less than 1.3M"
    fi
    else
    echo "Not yet M...."
    fi
    

这里还有一件事要注意,正如您从我的代码中看到的那样,我已经用数据准备了新变量,而不是在布尔运算和比较运算中使用原始字母和数字,这可以真正意想不到的结果。此外,虽然它们可能在某些条件下工作,但暂时,bash 更喜欢所有变量名都是小写的。如果您有任何问题,请告诉我。但是,我已经测试了两个代码块,它们都可以正常工作。