web-dev-qa-db-ja.com

シェルスクリプトを使用してWebページが存在するかどうかを確認するにはどうすればよいですか?

一連の漫画スキャンを1つのpdfファイルに変換できるプログラムを作成しようとしていますが、適切なURLがあるかどうかを判断するために画像をダウンロードする必要はありません。 Webページが存在するかどうかを確認するために使用できるシェルスクリプトコマンドはありますか?

55
Branden

* NIXでは、curlを使用して単純なHEADリクエストを発行できます(HEADはページ本体ではなくヘッダーのみを要求します)。

curl --head http://myurl/

次に、HTTPステータスコード(200 OK、404 Not Foundなど)を含む最初の行のみを取得できます。

curl -s --head http://myurl/ | head -n 1

そして、適切な応答を得たかどうかを確認します(ステータスコードは200または3 **です):

curl -s --head http://myurl/ | head -n 1 | grep "HTTP/1.[01] [23].."

ステータスコードが正常な場合は最初の行が出力され、そうでない場合は何も出力されません。また、/ dev/nullにパイプして出力を取得せず、$?動作したかどうかを判断するには:

curl -s --head http://myurl/ | head -n 1 | grep "HTTP/1.[01] [23].." > /dev/null
# on success (page exists), $? will be 0; on failure (page does not exist or
# is unreachable), $? will be 1

[〜#〜] edit [〜#〜]-sは、単にcurlに「進行状況バー」を表示しないように指示します。

105
zneak

CURLを使用してステータスコードを取得し、必要な値を確認します。

status=$(curl -s --head -w %{http_code} http://www.google.com/ -o /dev/null)
echo $status
23
Sithsu

まず、認証の問題がないことを確認します。認証が必要な場合は、ユーザー名とパスワードを入力します。シェルスクリプトファイル(checkURL.sh)を作成し、以下のコードを貼り付けます。

これがお役に立てば幸いです。

checkURL.sh

yourURL="http://abc-repo.mycorp.com/data/yourdir"

if curl --output /dev/null --silent --head --fail "$yourURL"
then
    echo "This URL Exist"
else
    echo "This URL Not Exist"
fi

Nexusや他のリポジトリで私のために働いています。

13
JDGuide

常にwget;を使用できます。私はコードが簡単なのでやります。

 if [[ $(wget http://url/ -O-) ]] 2>/dev/null
  then echo "This page exists."
  else echo "This page does not exist."
 fi

-O-オプションをwgetと共に使用すると、ページのコンテンツを出力しようとしますが、それが存在する場合のみです。そのため、出力がない場合、ページは存在しません。 2>/dev/nullは、出力(ある場合)をゴミ箱に送信するためのものです。

期限が過ぎていることは知っていますが、これが役立つことを願っています。

2
Alek