0

我试图从名为 ipserver.txt 的文件中获取所有 IP 地址,并检查 IP 地址是关闭还是打开。在 ipserver.txt 文件中,我的 ip 地址如下所示:

# My text file ipserver.txt
host1 10.0.0.1
host2 192.168.10.23
host3 192.168.0.1
host4 192.168.23.10

# My script
date
cat ipserver.txt | while read output
do
    ping -c 1 "$output" > /dev/null

    if [ $? -eq 0 ]
    then
            # echo -e "\n\033[4;31mHOSTNAME\033[0m  \t\t\033[1;4;31mIP\033[0m" 
            echo "$output is up"    
            # printf $output >> resultat 
    else
            echo "$output is down"
    fi
done

# cat resultat

我试图输出的是一个包含所有输出的表,如下所示:

HOSTNAME    IP                  UP/DOWN
--------------------------------------------
host1       10.0.0.1            UP
host2       192.168.10.23       DOWN
host3       192.168.0.1         UP
host4       192.168.23.10       DOWN
--------------------------------------------

在我的脚本中,我试图将 $output 重定向到 resultat,但如果我想对了,现在不要这样做。在文本文件 ipserver.txt 中,如果我不写 host1、host2、host3 和 host4,我可以从文件中检查 IP 地址。有人可以给我一个关于如何解决我的脚本的提示,这样我就可以获得我想要的输出

4

2 回答 2

1

这将做你想要的:

#!/bin/bash
printf "HOSTNAME\tIP\t\t\tUP/DOWN\n"
echo "----------------------------------------------------------"

while read -r host ip
  do ping -c 1 "$ip" > /dev/null 2>&1 && printf "$host\t\t$ip\t\tUP\n" || printf "$host\t\t$ip\t\tDOWN\n"
done < ipserver.txt

echo "----------------------------------------------------------"

可能最好将其放入脚本中。如果要将结果发送到文件,请重定向整个输出。即,如果您调用它test-servers并使其可执行:

./test-servers >> resultat
于 2015-01-13T13:25:20.990 回答
0

我想你正在寻找printf,以下对你有用吗?

date
i=1
cat ipserver.txt | while read output
do
    extr=${output#"host$i"}
    ping -c 1 "$extr" > /dev/null

    if [ $? -eq 0 ]
    then
        printf "%-16s %-16s %s\n" "host$i" $extr "UP"
    else
        printf "%-16s %-16s %s\n" "host$i" $extr "DOWN"
    fi
    ((i++))
done
于 2015-01-13T17:04:45.610 回答