我有一个文本文件,其中包含名为address.txt的IP地址列表,其中包含以下内容
172.26.26.1 wlan01
172.26.27.65 wlan02
172.26.28.180 wlan03
我需要编写一个bash脚本来读取唯一的IP地址,ping它们并输出到另一个文本文件,如下所示:
172.26.26.1 IS UP
172.26.27.65 IS DOWN
172.26.28.180已下降
我是bash脚本的新手,所以我不知道从哪里开始。任何帮助将不胜感激。
答案 0 :(得分:4)
在Linux中,这可行:
awk '{print $1}' < address.txt | while read ip; do ping -c1 $ip >/dev/null 2>&1 && echo $ip IS UP || echo $ip IS DOWN; done
我现在没有cygwin进行测试,但它也应该在那里工作。
说明:
awk
,我们从输入文件中获取第一列并将其传递给循环ping
发送一个$ip
,并将标准输出和标准错误重定向到/dev/null
,以便它不会污染我们的输出ping
成功,则会执行&&
之后的命令:echo $ip IS UP
ping
失败,则会执行||
之后的命令:echo $ip IS DOWN
稍微可读,扩展的格式,放入脚本:
#!/bin/sh
awk '{print $1}' < address.txt | while read ip; do
if ping -c1 $ip >/dev/null 2>&1; then
echo $ip IS UP
else
echo $ip IS DOWN
fi
done