1

我需要 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"

因此,当我打印 in 的值时$iplistadd_ip_if_pings它总是包含一个 ip。最后我得到输出:

List:

我想这是某种同步问题,因为多个线程使用相同的变量。这里最好的解决方案是什么?我需要并行ping所有设备,因为我不想永远等待......

4

1 回答 1

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 )
于 2013-02-15T10:55:40.447 回答