0

各 URL の内容を確認するために、テキスト ドキュメントのリストを使用し、リストにある各 URL をカールする単純な bash スクリプトを作成しようとしています。2 つのサイトを cURL して残りのテキスト ドキュメントを作成できますが、最初の 2 つしかダウンロードできません。grep コマンドを使用して、IP を取得し、別のファイルに配置するスクリプトを既に作成しています。最初に私は試しました

#!/bin/bash
for var in `cat host.txt`; do
curl -s $var >> /tmp/ping/html/$var.html
done

サイレントスイッチの有無にかかわらず試してみました。次に、次のことを試しました。

#!/bin/bash  
for var in `head -2 host.txt`; do  
curl $var >> /tmp/ping/html/$var.html  
wait  
done  
for var in `head -4 host.txt | tail -2`; do  
curl $var >> /tmp/ping/html/$var.html  
done  

これは、それらすべてを同時に実行しようとし、2 後に停止します。

#!/bin/bash  
for var in `head -2 host.txt`; do  
curl $var >> /tmp/ping/html/$var.html   
done 
wait 
for var in `head -4 host.txt | tail -2`; do  
curl $var >> /tmp/ping/html/$var.html  
done  

これは同じことを行います。私はbashスクリプトを初めて使用し、基本的なことしか知りません。助けていただければ幸いです

4

2 に答える 2

0

簡単なことから始めてください: 実際にリスト全体を繰り返し処理していることを確認してください:

# This is the recommended way to iterate over the file. See
# http://mywiki.wooledge.org/BashFAQ/001
while read -r var; do
    echo "$var"
done < hosts.txt

次に、への呼び出しを追加し、curl終了ステータスを確認します

while read -r var; do
    echo "$var"
    curl "$var" >> /tmp/ping/html/$var.html || echo "curl failed: $?"
done < hosts.txt
于 2012-09-01T16:40:19.153 に答える
0

URL に 2 つのスラッシュがあるため、$var にパイプすると、間違ったファイル名になる可能性があります。さらに、URLを引用します。たとえば、URL のベース名で機能します。

#!/bin/bash
for var in `cat host.txt`; do
  name=$(basename $var)
  curl -v -s "$var" -o "/tmp/ping/html/$name.html"
done

空白行とコメント (#) をスキップすることもできます。

#!/bin/bash

file="host.txt"
curl="curl"

while read -r line
  do
    [[ $line = \#* ]] || [[  -z "${line}" ]]  && continue
    filename=$(basename $line)
    $curl -s "$line" >> "/tmp/ping/html/$filename.html"
done < "$file"
于 2012-09-01T16:02:19.790 に答える