2016-04-25 88 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 ]