Como comparar duas variáveis ​​contendo endereços IPv6?

Como comparar duas variáveis ​​contendo endereços IPv6?

Tenho que comparar duas variáveis ​​com o ipv6 para que haja strings e números inteiros juntos.

Eu tentei como abaixo:

if [[ "$ipvsrc" -eq "$ipvdst" ]];
       then echo -e "Value OK";  fi

a saída de erro foi:

line 7: [[: 2a00: value too great for base (error token is "2a00")

Então:

if [ $ipvsrc -eq $ipvdst];
       then echo -e "Value OK";  fi

a saída de erro foi:

line 7: [: 2a00:0da9:000a:2010:1fc:0:2174:1951: integer expression expected

Então:

if [[ "$ipvsrc" == "$ipvdst" ]];
       then echo -e "Value OK";
fi

saída: nenhuma

As variáveis ​​são definidas da seguinte forma:

ipvsrc=$(cat config_src | grep ipvsrc |grep -v localhost | cut -d '=' -f2);

ipvdst=$(cat config_dst | grep -i ipvdst | cut -d '=' -f2);

Alguma dica, senhores, sobre como obter a saída desejada? Muito obrigado, felicidades!

Responder1

Seu último exemplo está correto (supondo que você use um shell como bashou ksh93que entenda [[ ... ]], mas parece que sim):

if [[ "$ipvsrc" == "$ipvdst" ]]; then
    echo "Value OK";
fi

As duas variáveis ​​​​que você compara contêm strings, portanto, citá-las e usá-las ==está correto.

A razão pela qual você não está obtendo nenhuma saída provavelmente é simplesmente porque a comparação é avaliada como falsa, ou seja, que as duas strings não são idênticas.

Infelizmente, não conheço o conteúdo de config_{src,dst}, portanto não posso dizer quais serão os valores das duas variáveis, ou se devem ser iguais ou diferentes um do outro.

informação relacionada