0

我正在尝试编写一个简单的 bash 脚本,该脚本将使用文本文档中的列表并卷曲列表中的每个 URL,以便查看每个 URL 的内容。它允许我卷曲 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 脚本的新手,只知道一些基础知识,任何帮助将不胜感激

4

2 回答 2

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"
于 2012-09-01T16:02:19.790 回答
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 回答