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