我需要编写一个 bash shell 脚本来检查一系列 IP 地址,以查看主机在该地址是否“活动”。我还需要列出那些“活动”的 IP 编号,并提供显示的摘要“活动”和“不活动”IP 地址的数量。地址范围将全部位于“C 类”网络中。我在弄清楚如何传递每个参数并使其对范围内的每个单独地址执行 ping 操作时遇到问题。
下面是我打算创建的脚本的示例运行。
$ programName 192.168.42 18 22
Checking: 192.168.42.18 19 20 21 22
Live hosts:
192.168.42.21
192.168.42.22
There were:
2 alive hosts
3 not alive hosts
found through the use of 'ping'.
答案1
这应该可以帮助您开始。
#!/bin/bash
for i in `seq ${2} ${3}`
do
ping -c 1 ${1}.${i} > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "${1}.${i} responded."
else
echo "${1}.${i} did not respond."
fi
done
示例输出:
xxxx@xxxxxx:~$ bash test.sh 10.140.0 100 103
10.140.0.100 responded.
10.140.0.101 did not respond.
10.140.0.102 did not respond.
10.140.0.103 did not respond.
这bash手册也许可以处理您需要的任何其他事情。
答案2
使用地图。这是完成这项工作的标准工具。
由于您只想知道哪些主机在线(并响应),请运行“ping 扫描” nmap -sP
:
如果您不关心输出的格式,您的脚本可以这样编写:
#!/bin/sh
nmap -sP "$1.$2-$3"