我需要ping一个设备列表并存储响应ping的IP。我有这段代码:
function add_ip_if_pings
{
ping -c 1 -W 1 $1 > /dev/null
if [ "$?" = "0" ]; then
iplist="$iplist $1"
echo $iplist
fi
}
# ...
for id in $(seq "$2" "$3"); do
for nr in $(seq 1 244); do
add_ip_if_pings "10.$secondIpOctet.$id.$nr" &
done
done
#waiting for all pings to finish
wait
echo "List: $iplist"
因此,当我在$iplist
中打印add_ip_if_pings
的值时,它总是包含一个ip。最后我得到了输出:
List:
我想这是某种同步问题,因为多个线程使用相同的变量。这里最好的解决方案是什么?我需要在paralell中ping所有设备,因为我不想永远等待...
答案 0 :(得分:1)
不使用IP添加到变量,而是使用文件系统。在脚本的开头:
DATADIR=/tmp/multiping
rm -fr ${DATADIR} # Clean up data from previous run
mkdir ${DATADIR} # Create directory
稍后在function add_ip_if_pings
:
touch ${DATADIR}/$1
在您的脚本结束时:
LIST=$( cd ${DATADIR} ; ls )