bash脚本从文本文件中读取/ ping一个ip地址列表,然后将结果写入另一个文件?

时间:2013-10-06 14:56:08

标签: bash cygwin

我有一个文本文件,其中包含名为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脚本的新手,所以我不知道从哪里开始。任何帮助将不胜感激。

1 个答案:

答案 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