Nnúmero de redirecionamentos de HTML de cURL

0

Meu pequeno script extrai DOIs de um arquivo csv para verificar se estão corretos. O número deve ser igual a 3 e, se não, quero enviar uma mensagem.

#!/bin/bash

doi=j.1540-6261.2011.01681.x
num_redirect=[[ curl -L -s -w %{num_redirects} "http://dx.doi.org/"$doi -o /dev/null ]]

echo $num_redirect

if (( "$num_redirect" -eq 3 ))
then
  echo $doi " is correct"
else
  echo $doi " is wrong"
fi

Embora num_redirects pareça ser 3 no meu terminal, continuo recebendo o erro ((: -lt 3 : syntax error in expression (error token is "3 ") e também uma saída incorreta.

Então eu verifiquei se num_redirect é na verdade um inteiro com

case $num_redirect in
   ''|*[!0-9]*) echo bad ;;
   *) echo good ;;
esac

( link ) e eu recebo bad .

Agora, pergunto-me que tipo de saída curl -s -w %{num_redirects} é. echo ${#num_redirect} diz que é 0 length.

    
por MERose 14.04.2015 / 18:57

1 resposta

2

O comando curl é executado, mas sua saída não é atribuída a num_redirect . Isso significa que a saída de onda é mostrada, ou seja, "3" (sem uma nova linha). No entanto, uma nova linha é inserida quando echo $num_redirect é executado, pois a variável está vazia. Isso dá a impressão de que a variável num_redirect tem o valor "3".

Você deve usar backticks ou $() para executar um comando e capturar sua saída no stdout.

num_redirect=$(curl -L -s -w %{num_redirects} "http://dx.doi.org/"$doi -o /dev/null)

Além disso, você deve comparar a variável com um inteiro usando [ e ] . Agora você está, novamente, apenas avaliando o comando.

if [ "$num_redirect" -eq 3 ]
then
    ...
else
    ...
fi
    
por 14.04.2015 / 20:27