从bash脚本未知主机ping

时间:2016-02-27 09:49:27

标签: bash ping

我有一个充满主机名的文件 - 每行一个。 现在我想检查这些主机名是否存在(如果没有,最终会从文件中删除它们)。 我在第一部分已经失败了:

#!/bin/bash
while read host; do
  ping -c1 "$host"
done <hosts

只给我

ping: unknown host google.com

(将google.com放入文件进行测试) 我也尝试删除引号 - 没有效果。 但是,当从终端运行命令时,我得到的是:

 $ ping -c1 "google.com"
   PING google.com (173.194.112.100) 56(84) bytes of data.
   ...

这里的问题是什么?

2 个答案:

答案 0 :(得分:1)

您的hosts文件很可能采用DOS行结尾格式(CR-LF行结尾),因此read使用google.com\r填充变量。

最简单的方法是使用dos2unix hosts将文件转换为UNIX行结尾。

答案 1 :(得分:1)

我试图做同样的事情,我最终得到了这个你可能觉得很好用的脚本。仍在努力尝试识别“ping:unknown host hostname.co.hk​​”,但这没关系。

    #!/bin/bash 
    cat list | while read domains; do
                reply=$(ping -c 1 $domains| grep -E '(from)' | wc -l)
                if [ $reply == 1 ]; then
                        DOMAIN=$(ping -c 1 $domains |grep 64 |awk '{print$4}')
                        IP=$(ping -c 1 $domains | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | head -1)
                        echo "$domains -> $DOMAIN -> $IP" >> ping.log;echo "$domains -> $DOMAIN -> $IP"
                else
                        echo "-----------------ping failed, verify domain name"
                fi 
done 
cat ping.log