Comparação da string IF ELSE de curl

3

Quando faço:

URL_CURL_CHECK="https://github.com/"
VAR_A=$(curl -Is --head "$URL_CURL_CHECK" | grep "HTTP/1.1 200 OK")
VAR_B="HTTP/1.1 200 OK"

echo
if [ "$VAR_A" != "$VAR_B" ]; then
    echo "Not equal ..."
else [ "$VAR_A" = "$VAR_B" ]
    echo "It's a match"
fi

echo
echo "Validate VARs: "
echo "$VAR_A"
echo "$VAR_B"

Aqui está a saída:

Not equal ...

Validate VARs:
HTTP/1.1 200 OK
HTTP/1.1 200 OK

Eu não entendo porque quando eu comparo VAR_A com VAR_B é sempre "Não igual".

    
por Pascal Andy 05.02.2017 / 19:11

1 resposta

4

O valor em $VAR_A tem um \r (retorno de carro) no final, o que faz a comparação de cadeias falhar. Ele terá um retorno de carro, pois esse é um cabeçalho HTTP, e o marcador de fim de linha nos cabeçalhos HTTP é especificado em RFC2616 como \r\n .

Uma maneira de corrigir isso:

VAR_A=$(curl -Is --head "$URL_CURL_CHECK" | grep "HTTP/1.1 200 OK" | tr -d '\r')

tr -d '\r' removerá todos os retornos de carro.

Outra alternativa é obter grep para retornar apenas o texto correspondente (que será exatamente a string HTTP/1.1 200 OK ):

VAR_A=$(curl -Is --head "$URL_CURL_CHECK" | grep -o "HTTP/1.1 200 OK")

Você pode, em qualquer caso, usar -F com grep aqui, pois a string é uma string fixa em vez de uma expressão regular:

VAR_A=$(curl -Is --head "$URL_CURL_CHECK" | grep -F -o "HTTP/1.1 200 OK")

Seu script também usa else com uma condição. Use apenas else ou use elif com uma condição. Nesse caso, basta remover a condição.

    
por 05.02.2017 / 19:22