2016-02-27 81 views
0

我有一个文件全是主机名 - 每行一个。 现在我想检查这些主机名是否存在(如果没有,最终将它们从文件中删除)。 我已经不能在第一部分:从bash脚本ping未知主机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. 
    ... 

这里有什么问题: 但是来自这就是我得到一个终端运行命令时?

+0

最简单的方法是用文件'ping -c 2“$ ip”&& echo“$ ip”>> tmpfile'来遍历每个文件。这会给你一个包含所有有效IP地址的'tmpfile'。然后,您可以移动或重命名原始文件并将'tmpfile'重命名为原始文件。 –

回答

0

最有可能你的hosts文件是DOS行结尾格式(CR-LF行尾),所以readgoogle.com\r填充变量。

最简单的方法是将文件转换为UNIX行结束符dos2unix hosts

+0

@ chris137:试试这个:'dos2unix Cyrus

+0

我很困惑,dos命令行结束时的担忧是什么? 'ping'不管用吗? –

+1

'“google.com”'和'“google.com \ r”'是不同的字符串,后者的名称解析不起作用。 – keltar

1

我试图做同样的事情,我结束了这个脚本,你可能会发现很好用。仍在努力尝试和认识到“ping:unknown 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