Bash |卷曲| curls 2 URL然后停止

时间:2012-09-01 15:49:38

标签: linux bash curl

我正在尝试编写一个简单的bash脚本,该脚本将使用文本文档中的列表并卷曲列表中的每个URL,以便查看每个URL的内容。它允许我cURL 2站点并为其余站点创建文本文档,但它只下载第一个2.我已经设法编写拉动IP的脚本并使用grep命令将它们放在一个单独的文件中。起初我试过

#!/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脚本的新手,只知道一些基础知识,任何帮助都会受到赞赏

2 个答案:

答案 0 :(得分:0)

你输入$ var,这可能会导致文件名错误,因为URL中有两个斜杠。另外我会引用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"

答案 1 :(得分: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