一、目的
解决Shell脚本单线程下效率低下的问题
二、适用场景
需要在Linux系统执行同一项命令,但是针对不同的对象,例如PING检测主机,当然可以延展,只要是命令之间不会产生冲突就可以了
三、场景模拟
3.1、我为啥写这个?
学习这个东西的原因是因为朋友需要对多达几百个IP进行Telnet检测,然后询问我能不能写脚本实现,一开始我没考虑太多,直接开始写,脚本内容如下:
3.2、多种方式实现“多线程”
3.2.1、第一个方案:命令后台运行+wait
命令
之所以第一个写这个方案,是因为我现在只理解这个,其他的方法还在研究中,下面先附上脚本内容吧
#!/bin/bash # 设置并发的进程数 #echo "请输入线程数" #read s rm -f ips.txt disables.txt read -p "请输入IP列表文件路径" File if [[ -f "$File" ]];then echo -e "正在获取IP列表" else echo "找不到这个文件" exit 22 fi ips=`cat $File | wc -l` echo -e "当前文件存在${ips}个IP地址" for((i=1;i<=${ips};i++));do { ip=`cat $File | awk "NR==$i{print }"` sleep 5 ping $ip -c 5 >/dev/null if [[ "$?" == "0" ]];then echo -e "$ip" >> ips.txt else echo "$ip" >> disables.txt fi } & done wait connects=`cat ips.txt | wc -l` disconnects=`cat disables.txt | wc -l` echo -e "完成\n存活IP已记录到: ips.txt\n未使用[也可能禁PING]的已记录到:disables.txt" echo "当前可PING通的IP有: ${connects}" echo "当前不可PING通的IP有: ${disconnects}"
本文来自博客园,作者:坐公交也用券,转载请注明原文链接:https://www.cnblogs.com/liumou-site/p/12846511.html