BASH-麻烦从文本文件行ping

时间:2011-08-21 20:46:17

标签: bash text-files ping

有一个文本文件,我想要阻止大约300万个网站的URL。 试图逐个ping它们(是的,我知道这需要一些时间)。 有一个脚本(是的,我在BASH中有点慢),它从文本文件中一次读取一行。 显然不能在这里打印文本文件。文本文件已创建>> w / Python前段时间。 问题是ping返回每个条目的“未知主机”。如果我使用相同的条目手工制作较小的文件,则脚本可以正常工作。我认为这可能是一个空白或行尾问题,因此尝试在脚本中解决这个问题。问题可能是什么?

  #!/bin/bash
  while read line
  do
    li=$(echo $line|tr -d '\n')
    li2=$(echo $li|tr -d ' ')
    if [ ${#line} -lt 2 ]
    then
      continue
    fi
    ping -c 2 -- $li2>>/dev/null
    if [ $? -gt 0 ]
    then 
       echo 'bad'
    else
       echo 'good'
    fi
    done<'temp_file.txt'

4 个答案:

答案 0 :(得分:1)

文件是否包含网址或主机名?

如果它包含URL,则必须在ping之前从URL中提取主机名:

hostname=$(echo "$li2"|cut -d/ -f3);
ping -c 2 -- "$hostname"

答案 1 :(得分:1)

Ping用于ping主机。如果您有网站的网址,那么它将无法使用。检查文件中是否有主机,例如www.google.com或IP地址,而不是实际的完整网站网址。如果您想查看实际网址,请使用wget等工具和grep/awk等其他工具来抓取404或其他错误。最后但并非最不重要的是,具有安全意识的人有时会阻止来自外部的ping,所以请注意。

答案 2 :(得分:0)

C检查文件是否包含窗口式\r\n行结尾:head file | od -c

如果有,请修复它:dos2unix filename filename

答案 3 :(得分:0)

我不会使用ping。它很容易被阻止,并且它不是检查IP地址或服务器是否显示网页的最佳方式。

如果您只想查找相应的IP,请使用host

$ host www.google.com
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 209.85.149.106
www.l.google.com has address 209.85.149.147
www.l.google.com has address 209.85.149.99
www.l.google.com has address 209.85.149.103
www.l.google.com has address 209.85.149.104
www.l.google.com has address 209.85.149.105

如您所见,您将获得注册到主机的所有IP。 (请注意,这需要您解析网址中的主机名!)

如果您想查看网址是否指向网络服务器,请使用wget

wget --spider $url

--spider标记使wget不保存页面,只检查它是否存在。您可以查看返回代码,或添加-S标志(打印返回的HTTP标头)