0

我有一个名为 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 已启动

172.26.27.65 已关闭

172.26.28.180 已关闭

我对 bash 脚本相当陌生,所以我不确定从哪里开始。任何帮助将非常感激。

4

1 回答 1

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输入文件中获取第一列并将其传递到循环中
  • 我们发送一个pingto $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
于 2013-10-06T15:13:14.427 回答