bash错误中的Int比较

时间:2016-04-25 11:25:24

标签: bash

我正在尝试比较两个IP地址的左侧值,但是我收到错误:

  

“:a:int expected ...”

以下是代码:

IN="195.152.15.1"
IFS='.' read -ra ADDR <<< "$IN"

IN2="196.151.14.1"
IFS='.' read -ra ADDR2 <<< "$IN2"

a=${ADDR[0]}
b=${ADDR2[0]}

if [ a -eq b ]
then
echo "OK"
fi

我尝试了几种组合,但没有任何作用,有什么建议吗?

p.s:我不想使用“=”符号,只想使用“-eq”

2 个答案:

答案 0 :(得分:2)

您的问题已在评论中得到解决。您需要参考比较中的变量:

if [ "$a" -eq "$b" ]
then
    echo "OK"
fi

使用[时,始终建议使用变量引号。有了bash,你就有了几个选择:

if [[ $a -eq $b ]] # extended test is smart enough to deal with unquoted variables
if (( a == b )) # inside arithmetic context, a and b unambiguously refer to variables

我听说((的表现略差于其他选项,但我怀疑它是否值得担心。

值得一提的是,脚本中应避免使用ALL_CAPS变量名,因为它们是shell使用的。此外,如果您只想要每个IP的第一部分,则无需读入数组:

IFS=. read -r ip1 junk <<< "$in1"

该行的其余部分写入变量junk,可以忽略。

答案 1 :(得分:0)

if [ a -eq b ]更改为if [ $a -eq $b ]