compare string no bash

0

Eu tentei escrever o seguinte script para comparar dois cabeçalhos de resposta HTML, mas estou atingindo a condição else , apesar de imprimir o cabeçalho armazenado na variável $a Estou obtendo o mesmo valor exato.

#!/bin/bash
echo
echo "Connecting to www.cloudflare.com...";
curl -Is "https://www.cloudflare.com/" > file1.txt;
a=$(cat file1.txt | grep Server);
echo "$a";
echo
echo "Connecting directly to www.amazon.com...";
curl -Iks "https://www.amazon.com/" > file2.txt;
b=$(cat file2.txt | grep Server);
echo "$b";
echo

if [ "$a" == "Server: cloudflare-nginx" ]; then
    echo "This connection is going via CloudFlare"
else
    echo "This connection is NOT going via CloudFlare"
    echo "$a"
fi 
    
por JohnSnow 11.08.2017 / 00:33

1 resposta

2

As linhas de cabeçalho que estão sendo retornadas dos comandos curl têm ^M antes da nova linha. Você pode alterar o if para usar um regex:

if [[ "$a" =~ "Server: cloudflare-nginx" ]]; then
    echo "This connection is going via CloudFlare"
else
    echo "This connection is NOT going via CloudFlare"
    echo "$a"
fi

Você também pode remover o \r alterando a linha:

a=$(cat file1.txt | tr -d '\r' | grep '^Server:');
    
por 11.08.2017 / 00:49