14-同网段ip
原创大约 2 分钟
并发特性
1、根据for循环的条件,生成多个子进程来实现并发任务。
2、并发执行的最后,wait会等所有子进程返回结果后再退出主进程脚本。
ping
# ping -c 1 -i 0.1 -W 1 10.0.1.1
PING 10.0.1.1 (10.0.1.1) 56(84) bytes of data.
64 bytes from 10.0.1.1: icmp_seq=1 ttl=128 time=0.489 ms
--- 10.0.1.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.489/0.489/0.489/0.000 ms
# ping -c 1 -i 0.1 -W 1 10.0.1.3
PING 10.0.1.3 (10.0.1.3) 56(84) bytes of data.
--- 10.0.1.3 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms-c 1: 这个选项指定ping命令发送的ICMP Echo Request消息的数量。在这里,-c 1表示只发送一个消息。-i 0.1: 这个选项指定发送ICMP Echo Request消息的时间间隔。在这里,-i 0.1表示间隔0.1秒发送一次。-W 1: 这个选项指定ping命令等待响应的超时时间。在这里,-W 1表示等待1秒钟。
脚本代码
#!/bin/bash
#__author__: hong
# 不存在则创建,存在则清空
> ./ip_offline.txt
> ./ip_online.txt
# 参数补足个
if [ $# -ne 3 ];then
echo "Usage: bash $0 10.0.1 1 254"
exit 3
fi
# seq 生成整数序列
pingnum=`seq $2 $3`
for i in $pingnum
do
{
# 加快响应效率
ping -c 1 -i 0.1 -W 1 $1.$i &> /dev/null
if [ $? -eq 0 ];then
echo "IP: $1.$i is online."
echo "$1.$i" >> ./ip_online.txt
else
# tee 从标准输入读取数据,输出到标准输出一个或多个文件中 -a 追加写入
echo "IP $1.$i is offline."|tee -a ./ip_offline.txt
fi
}& #&:将循环中的命令放入后台执行,以实现并行执行
done
# wait:等待所有后台任务完成
wait运行
# bash ping.sh 192.168.1 1 254
# cat ip_online.txt
192.168.1.23
192.168.1.1
192.168.1.22
192.168.1.66
192.168.1.81
192.168.1.39
192.168.1.77
192.168.1.36
192.168.1.46
192.168.1.172
192.168.1.25
192.168.1.188
192.168.1.131
192.168.1.220
192.168.1.170
192.168.1.240
192.168.1.228
# cat ip_online.txt | wc -l
17