我正在尝试比较两个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”
答案 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 ]