expressão inteira esperada

3

Eu tenho o seguinte script que está tentando corresponder e endereço IP com um valor em um arquivo

#!/usr/bin/env bash

#To find the IP via ping
ping=$(ping federicolivieri.noip.me -c 1)
#To cut the result
ip=$(echo ${ping} | awk '{print $3}' | rev | cut -c2- | rev | cut -c2-)
#dnsdist variable
dnsdist_ip=$(awk 'END{print $1}' /etc/dnsdist/dnsdist.conf | cut -c 19- | rev | cut -c 2- | rev)

if [ "$ip" -eq "$dnsdist_ip" ]; then
   echo "ciao"
   else
   echo "newServer{address="'echo ${ip}'", name="raspi"}" >> /etc/dnsdist/dnsdist.conf
fi

No entanto, quando executo o script, recebo esse erro

root@raspberrypi:/etc/myscripts# ./noip.sh
./noip.sh: line 10: [: 2.31.237.195: integer expression expected

Eu entendi que o script espera um valor numérico inteiro, mas como você sabe, endereço IP como "pontos"

Como posso solucionar esse problema?

    
por Federi 21.04.2016 / 17:39

1 resposta

3

Como Archemar apontou em seu comentário, você quer usar = para comparação de string:

if [ "$ip" = "$dnsdist_ip" ];

O operador -eq é para comparação numérica, conforme explicado aqui :

n1 -eq n2

True if the integers n1 and n2 are algebraically equal; otherwise, false.

Como os IPs não são inteiros (eles também contêm . ), você não pode usar -eq para compará-los.

    
por 21.04.2016 / 17:52

Tags