我有一个包含多个主机和IP的文件,格式如上:
alpha, 192.168.1.1
beta, 192.168.1.2
gamma, 192.168.1.3
我正在尝试创建一个类似于:
的脚本“Pinging hostname alpha”
ping 192.168.1.1
并跳转到列表中的下一个ip。 我不想要整个脚本,只需要一些建议。
谢谢, 亚历
答案 0 :(得分:3)
如果您在输入字段分隔符中添加逗号,它将帮助解析这些行:
IFS=$IFS,
while read name ip; do
echo -n "Pinging hostname $name..."
ping -c2 "$ip" &>/dev/null && echo success || echo fail
done < /tmp/hosts
答案 1 :(得分:2)
我在read
的行中读到了。您可能还想给ping
一个选项,告诉它多少次ping。例如,大多数Linux系统上的默认设置是永久ping,这似乎不适合您的情况。
答案 2 :(得分:1)
您可以使用AWK:
$ awk '{print "Pinging hostname "$1; system("ping -c 3 "$2) }' ips
Pinging hostname alpha,
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
如果对您很重要,您也可以删除该逗号:
$ awk '{sub(/,/,"");print "Pinging hostname "$1; system("ping -c 3 "$2) }' ips
Pinging hostname alpha
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
答案 3 :(得分:0)
我可能会迟到一点,但fping怎么样?使用-f从文件中读取(需要sudo),或使用&lt;管道传输文件(如手册页所示)。它不会告诉你“ping alpha”,但它会很快告诉你是否可以与主机取得联系。
答案 4 :(得分:-2)
试试这个
#!/bin/bash
IPLIST="path_to_the_Ip_list_file"
for ip in $(cat $IPLIST)
do
ping $ip -c 1 -t 1 &> /dev/null
if [ $? -ne 0 ]; then
echo $ip ping faild;
else
echo $ip ping passed;
fi
done