#!/bin/bash
# bam to bed
#参考链接:  https://taoyan.netlify.app/post/2020-01-02.%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%B9%B6%E8%A1%8C%E8%AE%A1%E7%AE%97/
sj=`date '+%Y-%m-%d %H:%M:%S'`
start_time=`date +%s`  #定义脚本运行的开始时间

tmp_fifofile="/tmp/$$.fifo"
mkfifo $tmp_fifofile   # 新建一个FIFO类型的文件
exec 6<>$tmp_fifofile  # 将FD6指向FIFO类型, 这里6也可以是其它数字
rm $tmp_fifofile  #删也可以，

thread_num=100  # 定义最大线程数

#根据线程总数量设置令牌个数
#事实上就是在fd6中放置了$thread_num个回车符
for ((i=0;i<${thread_num};i++));do
    echo
done >&6

for fuck  in `cat /opt/sh/Ip.txt |grep -v "#"`# 轮询/opt/sh/Ipp.txt里面的IP
do
    # 一个read -u6命令执行一次，就从FD6中减去一个回车符，然后向下执行
    # 当FD6中没有回车符时，就停止，从而实现线程数量控制
    read -u6
    {
   baidu=`curl -s  $fuck`
   #echo $baidu 
      if  [ -z "$baidu"  ];
        then
            echo "$fuck 当前IP被墙 $sj"
            echo "$fuck 当前IP被墙 $sj" >> /opt/sh/beiqiangIP.txt
       fi
        echo >&6 # 当进程结束以后，再向FD6中加上一个回车符，即补上了read -u6减去的那个
    } &
done

wait # 要有wait，等待所有线程结束

stop_time=`date +%s` # 定义脚本运行的结束时间
echo "TIME:`expr $stop_time - $start_time`" # 输出脚本运行时间

exec 6>&- # 关闭FD6，最后一定要记得关闭FIFO
echo "over" # 表示脚本运行结束
