N cURL로부터의 HTML 리디렉션 수

N cURL로부터의 HTML 리디렉션 수

내 작은 스크립트는 csv 파일에서 DOI를 추출하여 올바른지 확인합니다. 숫자는 같아야 합니다 3. 그렇지 않으면 메시지를 출력하고 싶습니다.

#!/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

num_redirects내 터미널에서는 작동하는 것 같지만 계속 3오류가 발생 ((: -lt 3 : syntax error in expression (error token is "3 ")하고 잘못된 출력이 발생합니다.

num_redirect그런 다음 실제로 정수인지 확인합니다.

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

(https://stackoverflow.com/a/3951175/3621464)나는 받았다 bad.

이제 어떤 종류의 출력이 나오는지 알고 싶습니다 curl -s -w %{num_redirects}. 길이가 echo ${#num_redirect}있다고 해보세요 0.

답변1

명령 curl이 실행되었지만 해당 출력이 에 할당되지 않았습니다 num_redirect. 이는 컬의 출력이 "3"(개행 없음)으로 표시됨을 의미합니다. 그러나 echo $num_redirect변수가 비어 있으므로 실행 시 줄바꿈이 삽입됩니다. 이는 변수 num_redirect의 값이 "3"이라는 인상을 줍니다.

백틱을 사용하거나 $()명령을 실행하고 표준 출력에서 ​​해당 출력을 캡처해야 합니다.

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

[또한 변수를 정수와 비교하려면 및 를 사용해야 합니다 ]. 이제 다시 명령을 평가하면 됩니다.

if [ "$num_redirect" -eq 3 ]
then
    ...
else
    ...
fi

관련 정보