从 bash-脚本未知主机执行 Ping
Ping from bash-script unknown host
我有一个充满主机名的文件 - 每行一个。
现在我想检查这些主机名是否存在(如果不存在,最终将它们从文件中删除)。
我已经在第一部分失败了:
#!/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.
...
这里有什么问题?
您的 hosts
文件很可能是 DOS 行尾格式(CR-LF 行尾),因此 read
将变量填充为 google.com\r
。
最简单的方法是将文件转换为以 dos2unix hosts
.
结尾的 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}')
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
我有一个充满主机名的文件 - 每行一个。 现在我想检查这些主机名是否存在(如果不存在,最终将它们从文件中删除)。 我已经在第一部分失败了:
#!/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.
...
这里有什么问题?
您的 hosts
文件很可能是 DOS 行尾格式(CR-LF 行尾),因此 read
将变量填充为 google.com\r
。
最简单的方法是将文件转换为以 dos2unix hosts
.
我试图做同样的事情,最后我得到了这个脚本,您可能会发现它很好用。仍在努力尝试识别 "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}')
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