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"

したがって、の値を出力$iplistすると、add_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 に答える