2016-04-25 87 views
1

我想比较两个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:我不想用“=”号,只有“当量”

+3

你想说'if [“$ a”-eq“$ b”]'。也就是说,您错过了引用该变量的美元符号。 – fedorqui

回答

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,可以忽略不计。

0

变化if [ a -eq b ]if [ $a -eq $b ]