Linux bash脚本中的数字比较
我写这个脚本是为了在bash中比较两个数字,但它对一些数字给出了错误的答案。 如果我给它2和2作为输入,它会给我“X大于Y”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
#/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
表示数值相等,而不是=
。