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

おすすめ記事