遅延をループの停止条件として使用して、OS Xの端末を使用してIPをpingする方法は?


1

遅延が特定の値を超えている間にIPにpingを実行したいです。例が役立つと思います:

"ping *IP here*"コマンドに対して次の結果があると仮定します。

PING *IP here* (*IP here*): 56 data bytes
64 bytes from *IP here*: icmp_seq=0 ttl=53 time=127.238 ms
64 bytes from *IP here*: icmp_seq=1 ttl=53 time=312.762 ms
64 bytes from *IP here*: icmp_seq=2 ttl=53 time=251.475 ms
64 bytes from *IP here*: icmp_seq=3 ttl=53 time=21.174 ms
64 bytes from *IP here*: icmp_seq=4 ttl=53 time=27.953 ms

待ち時間が特定の値を下回った後、pingを停止する方法が必要です。100とすると、上の例では4番目の結果の後に停止します。

回答:


1

もっと簡単な方法があるかもしれませんが、私にとってはうまくいきます:

#!/bin/bash

TRESHOLD=10

while $(true); do 

    time=$(ping -c 1 google.com | grep time | cut -d ' ' -f 7 | cut -d '=' -f 2 | cut -d '.' -f 1) 

    if [ $time -lt $TRESHOLD ]; then
        echo "Less than $TRESHOLD ($time), continue"
        sleep 1
    else
        echo "More than $TRESHOLD ($time), stop"
        exit
    fi

done

出力:

~ $ ./1.sh
Less than 10 (8), continue
Less than 10 (9), continue
Less than 10 (9), continue
Less than 10 (9), continue
Less than 10 (9), continue
More than 10 (11), stop
~ $

以前は「。」でカットしていました bashが山車を行いませんので、フロートの全体の一部を取得するには、整数のみ:/ -あなたはそれを評価するためにsed / awkのか、BCを使用する必要があります
マレクベットマン

ああ、気付いたのは、TRESHOLDより短い時間の後にスクリプトを停止し、 '-lt $ TRESHOLD'を '-gt TRESHOLD'に変更し、 "Less" <-> "More"を適切に変更するだけです。
マレクベットマン14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.