一、目的
解決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}"