[Shell] 纯文本查看 复制代码 #!/bin/bash
#多线程Ping ip的shell脚本
thread=5
#设置线程数量
tmp_fifofile=/tmp/$$.fifo
#临时管道文件
mkfifo $tmp_fifofile
#把文件定义为管道文件
exec 8<> $tmp_fifofile
rm $tmp_fifofile
#用句柄打开文件,并且删除文件,让句柄留下
#句柄的内容只能读一次,然后自动消失
for i in `seq $thread`
do
echo >&8
done
#给句柄输出5个换行(原本有5条船)
for i in{1..254} #254个人在玩
do
read -u 8 #意思是借船
#只有在句柄读取到内容才会继续循环ping,读了之后句柄会少一个换行
{
ip=192.168.10.$i
ping -c1 -W1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip is up"
else
echo "$ip is down"
fi
#循环ping ip
echo >&8
#当一个线程执行完,再给句柄加入一个换行(玩完后还船)
}&
# {}&这个的意思是把程序加入后台运行
done
wait
#wait 等上面后台程序执行完
exec 8>&-
#释放句柄,不需要了
echo "all finish......"
#原理例子:公园一共5条船(5线程)254个人玩,第一批5个人一起去,然后其中一个人回来环船
#下一个人开他的船接着去,可以让同时5个人玩船。。 |