2016-04-25 11 views
1

私は2つのIP住所が左値を比較しようとしているが、私はエラーを取得:ここのInt比較

":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:私はあなたの問題はコメントで解決されているif [ a -eq b ]

+3

あなたは 'if [" $ a "-eq" $ b "]'と言っています。つまり、変数を参照するドル記号がありません。 – fedorqui

答えて

2

if [ $a -eq $b ]

0

変更、「=」記号を使用するだけで、「-eq」を望んでいません。あなたは比較で変数を参照する必要があります。[を使用した場合、変数の周り

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変数名は、シェルで使用するためのスクリプトでは避けてください。また、あなただけの各IPの最初の部分をしたい場合は、配列に読み込む必要はありません。

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

行の残りの部分が無視できる変数junkに書かれています。

関連する問題