从文件中获取IP地址并将结果输出到表中

时间:2015-01-13 13:15:08

标签: bash bash4

我试图从名为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地址。 有人可以给我一个如何解决我的脚本的提示,这样我就可以得到我想要的输出

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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