2017-07-29 1 views
0

diffの.txtファイル(ven配列はtxtファイルを定義しています)からurlsを読み込み、レスポンスコードが200でない場合はerror.txtにエラーを書き込みます。エラーのあるループのbash

悲しいことに、リンクのいずれにもエラーがない場合でも、最後には常にそれがいつも行います。理由は何ですか?

for i in "${ven[@]}"; do 
     while IFS='' read -r line || [[ -n "$line" ]]; do 
         IP=$(curl --write-out '%{http_code}' --silent --output /dev/null $line?upstream=$1) 
           if [ $IP != 200 ] 
           then 
           counter=$((counter + 1)) 
           echo $(date +"%d.%m.%y %T") : $line >> error.txt 
           fi 
     done < $i 
done 
+0

あなたの 'ven'アレイの最後のエントリ? –

+0

ven =( "1.txt" "2.txt" "3.txt" "4.txt") - 私にはうまく見えますか? – Isengo

+0

これは、テキストファイルの1つに偽っています。/ 2.txtで1行で表示されます – Isengo

答えて

1

主な問題は、一貫性のないテスト式ブラケット(単一対二重)の使用とどのようにあなたが数をチェックされているが、あなたのスクリプトは、いくつかの引用問題があります。

if [[ "$IP" -ne 200 ]] 

-ne「等しくない」を意味し、あなたが既に使用していたので、二重括弧は一貫滞在。

他のものは、あなたが変数を引用する形で、より予防的である:

for i in "${ven[@]}"; do 
    while IFS='' read -r line || [[ -n "$line" ]]; do 
     IP=$(curl --write-out '%{http_code}' --silent --output /dev/null "$line?upstream=$1") 
     if [[ "$IP" -ne 200 ]]; then 
      counter=$((counter + 1)) 
      echo "$(date +'%d.%m.%y %T')" : "$line" >> error.txt 
     fi 
    done < "$i" 
done 

注:サイトがリダイレクトされた場合(301)、それはエラーが表示されます - 多分考慮すべき何かを。

+0

これは問題ではないようですが、それを指摘していただきありがとうございます。私はまだbashで多くのことをしなかった。私は書式設定のことを指摘する編集者を得ます。 301リダイレクトは、URLをリダイレクトするべきではないので、エラーを投げるべきですが、感謝します。 – Isengo

+0

スクリプトは変更を加えた後に正常に機能しました。質問にコードがない場合は、ここに再現できないので追加する必要があります。 (例えば 'counter = $((counter + 1))'は役に立ちません)... –

+1

間違いを発見した場合、txtファイルの1つにemtpy行があります。ありがとう。私は後でカウンタを使用して番号を記録します(echo -e 'Curl Requestsに' $ counter 'Errors' >> error.txtがあります) – Isengo