Linux bash脚本中的数字比较

Linux bash脚本中的数字比较,linux,bash,shell,terminal,Linux,Bash,Shell,Terminal,我写这个脚本是为了在bash中比较两个数字,但它对一些数字给出了错误的答案。 如果我给它2和2作为输入,它会给我“X大于Y” #/bin/bash 读取num1 读取num2 如果[$num1>$num2] 然后 回声“X大于Y” elif[$num1num2)) 然后 回声“X大于Y” elif((num1num2)) 然后 回声“X大于Y” elif((num1,-lt表示,-lt表示$num2]] 然后 回声“X大于Y” elif[[$num1$num2]] 然后 回声“X大于Y” eli

我写这个脚本是为了在bash中比较两个数字,但它对一些数字给出了错误的答案。 如果我给它2和2作为输入,它会给我“X大于Y”

#/bin/bash
读取num1
读取num2
如果[$num1>$num2]
然后
回声“X大于Y”
elif[$num1<$num2]
然后
回声“X小于Y”
elif[$num1=$num2]
然后
回声“X等于Y”
fi
这对我很有用:

cmp() {
    num1="$1"
    num2="$2"

    if [ $num1 -gt $num2 ]
        then 
            echo "X is greater than Y"
    elif [ $num1 -lt $num2 ]
        then 
            echo "X is less than Y"
    elif [ $num1 -eq $num2 ]
        then 
            echo "X is equal to Y"
    fi
}
然后查看结果:

cmp 2 3
X is less than Y

cmp 2 2
X is equal to Y

cmp 2 1
X is greater than Y
由于您使用的是
bash
,因此我建议您使用
[…]]
而不是
[…]
括号。

这对我很有用:

cmp() {
    num1="$1"
    num2="$2"

    if [ $num1 -gt $num2 ]
        then 
            echo "X is greater than Y"
    elif [ $num1 -lt $num2 ]
        then 
            echo "X is less than Y"
    elif [ $num1 -eq $num2 ]
        then 
            echo "X is equal to Y"
    fi
}
然后查看结果:

cmp 2 3
X is less than Y

cmp 2 2
X is equal to Y

cmp 2 1
X is greater than Y

由于您使用的是
bash
,我建议您使用
[…]]
而不是
[…]
括号。

您可以尝试使用bash算术上下文:

#!/bin/bash 
read num1
read num2
if (( num1 > num2 ))
    then 
        echo "X is greater than Y"
elif (( num1 < num2 ))
    then 
        echo "X is less than Y"
elif (( num1 == num2 ))
    then 
        echo "X is equal to Y"
fi 
#/bin/bash
读取num1
读取num2
如果((num1>num2))
然后
回声“X大于Y”
elif((num1
您可以尝试使用bash算术上下文:

#!/bin/bash 
read num1
read num2
if (( num1 > num2 ))
    then 
        echo "X is greater than Y"
elif (( num1 < num2 ))
    then 
        echo "X is less than Y"
elif (( num1 == num2 ))
    then 
        echo "X is equal to Y"
fi 
#/bin/bash
读取num1
读取num2
如果((num1>num2))
然后
回声“X大于Y”
elif((num1
(请注意:我们将使用-gt运算符表示>,-lt表示<,==表示=)


(请注意:我们将使用-gt运算符表示>,-lt表示<,==表示=)

进行尽可能少的更改,使括号加倍-进入
“双括号”
模式(仅在bash/zsh中有效,在Bourne shell中无效)

如果您想与sh兼容,可以保持“单括号”模式,但需要更换所有运算符

“单括号”
模式中,像
“,=”
这样的运算符仅用于比较字符串。要在“单括号”模式下比较数字,您需要使用
'-gt'
'-lt'
'-eq'

#!/bin/bash 
read num1
read num2
if [[ $num1 > $num2 ]]
    then 
        echo "X is greater than Y"
elif [[ $num1 < $num2 ]]
    then 
        echo "X is less than Y"
elif [[ $num1 = $num2 ]]
    then 
        echo "X is equal to Y"
fi 
#/bin/bash
读取num1
读取num2
如果[[$num1>$num2]]
然后
回声“X大于Y”
elif[[$num1<$num2]]
然后
回声“X小于Y”
elif[[$num1=$num2]]
然后
回声“X等于Y”
fi

要进行尽可能少的更改,请将括号加倍-进入
的“双括号”
模式(仅在bash/zsh中有效,在Bourne shell中无效)

如果您想与sh兼容,可以保持“单括号”模式,但需要更换所有运算符

“单括号”
模式中,像
“,=”
这样的运算符仅用于比较字符串。要在“单括号”模式下比较数字,您需要使用
'-gt'
'-lt'
'-eq'

#!/bin/bash 
read num1
read num2
if [[ $num1 > $num2 ]]
    then 
        echo "X is greater than Y"
elif [[ $num1 < $num2 ]]
    then 
        echo "X is less than Y"
elif [[ $num1 = $num2 ]]
    then 
        echo "X is equal to Y"
fi 
#/bin/bash
读取num1
读取num2
如果[[$num1>$num2]]
然后
回声“X大于Y”
elif[[$num1<$num2]]
然后
回声“X小于Y”
elif[[$num1=$num2]]
然后
回声“X等于Y”
fi

比较数字时,对
使用
-gt
运算符,对
@anubhava使用
-lt
运算符,但它对输入“2和3”给出了错误的答案。比较数字时,对
使用
-gt
运算符,
@anubhava使用
-lt
运算符,但对输入“2和3”给出了错误的答案可能重复。关于最后一行:否,您在
[…]
中使用
-eq
表示数值相等,而不是
=
。关于最后一行:否,您在
[…]
中使用
-eq
表示数值相等,而不是
=