从bash脚本Ping未知主机

从bash脚本Ping未知主机,bash,ping,Bash,Ping,我有一个满是主机名的文件-每行一个。 现在我想检查这些主机名是否存在(如果不存在,最终将其从文件中删除)。 我在第一部分已经失败了: #!/bin/bash while read host; do ping -c1 "$host" done <hosts (将google.com放入文件进行测试) 我还尝试删除引号-没有效果。 但是,当从终端运行命令时,我得到的是: $ ping -c1 "google.com" PING google.com (173.194.112.10

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

#!/bin/bash
while read host; do
  ping -c1 "$host"
done <hosts
(将google.com放入文件进行测试) 我还尝试删除引号-没有效果。 但是,当从终端运行命令时,我得到的是:

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

这里的问题是什么?

很可能您的
主机
文件是DOS行尾格式(CR-LF行尾),因此
read
google.com\r
填充变量


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

很可能您的
主机
文件是DOS行结尾格式(CR-LF行结尾),因此
read
google.com\r
填充变量


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

我也在尝试做同样的事情,最后我编写了这个脚本,您可能会发现它很好并且很有用。仍在努力尝试识别“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

我也试着做同样的事情,我最终得到了这个脚本,你可能会发现它很好,很有用。仍在努力尝试识别“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

最简单的方法是使用say
ping-c2“$ip”和&echo“$ip”>>tmpfile
遍历文件中的每个文件。这将给您留下一个包含所有有效ip地址的
tmpfile
。然后,您可以移动或重命名原始文件,并将
tmpfile
重命名为原始文件。最简单的方法是使用say
ping-c2“$ip”和&echo“$ip”>>tmpfile
遍历文件中的每个文件。这将给您留下一个包含所有有效ip地址的
tmpfile
。然后,您可以移动或重命名原始文件,并将
tmpfile
重命名为原始文件。@chris137:试试这个:
dos2unix我很困惑,dos行结尾有什么问题?
ping
无论如何都不起作用吗?
“google.com”
“google.com\r”
是不同的字符串,后者的名称解析不起作用。@chris137:试试这个:
dos2unix我很困惑,dos行结尾有什么问题吗?无论怎样,
ping
都不起作用吗?
“google.com”
“google.com\r”
是不同的字符串,后者的名称解析不起作用。