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