Linux ping指定网段所有Ip

Linux命令ping中,不支持设置接收毫秒超时,默认接收超时未4s,最小设置为1s,但是如果ping网段所有ip,有255个那就要4分钟!!太慢了! 但是可以用多进程的方式去ping,然后就很快了! 参考链接

原脚本:

#!/bin/bash
for var in {1..254};
do
	ip=192.168.54.$var
	ping -c 1 -w 1 -W 1 $ip >/dev/null 2>&1 
	if [ $? = 0 ];then
		echo "$ip [yes]"
	else
		echo "$ip [no]"
fi
done

多进程方式:

#!/bin/bash
ip="192.168.54."

echo "ping log:" > ./ping.txt
for i in {1..254}
do
	ping -c 1 -w 1 -W 1 $ip$i | grep -q "ttl=" && echo "$ip$i [yes]" >> ./ping.txt || echo "$ip$i [no]" >> ./ping.txt &
done
echo "wait 5s...."
sleep 5
cat ./ping.txt
cat ./ping.txt | wc -l

trap 在脚本中处理信号

参考链接

#!/bin/bash

echo running

cleanup(){
    echo cleanup
}

trap "cleanup" EXIT

ccc(){
    echo ccc
    exit
}

# 按 Ctrl + C 会使脚本终止执行,实际上系统发送里 SIGINT 信号给脚本进程,SIGINT 信号的默认处理方式就是退出程序。
# 如果要在 Ctrl + C 时不退出程序,那么就要使用 trap 命令来指定 SIGINT 的处理方式。
# trap 命令不仅仅能处理 Linux 信号,还能对脚本退出(EXIT)、调试(DEBUG)、错误(ERR)、返回(RETURN)等情况指定处理方式
# 参考链接:https://www.iteye.com/blog/codingstandards-836588
trap "ccc" SIGINT

while : ; do
    sleep 1
done