2017-03-07 1 views
0

私は、pingが応答しない場合にのみ続行するスクリプトを作成しようとしています。pingがダウンしている場合に限り、Bashが続行されます。

私は2つの主な問題に取り掛かります。 1つは、スクリプトを終了するために2つのCTL-Cコマンドが必要であり、もう1つの問題は、スクリプトが決して終了せず、殺しが必要であるということです。

ここに私の試みがあります。

rc=0 
until [ $rc -gt 0 ] 
do 
     ping 69.69.69.69 > /dev/null 2>&1 
     rc=$? 
done 

## Here will be the rest of code to be executed 

私はそれが2 CTL-Cコマンドを必要とし、続けて上記のこの1つは非常に近い感じ。 ここに私が見つけたことはありますが、まったく動かすことはできません。

counter=0 
while [ true ] 
do 
    ping -c 1 69.69.69.69 > /dev/null 2>&1 
    if [ $? -ne 0 ] then 
     let "counter +=1" 
    else 
     let "counter = 0" 
    fi 
    if [ $counter -eq 10 ] then 
     echo "Here should be executed once pinging is down" 
    fi 
done 

ご協力いただきありがとうございます。

+0

2番目のバージョンを実行すると特に何が起こりますか?エラーメッセージが表示されますか?彼らは何を言いますか? – Kenster

+0

あなたのスクリプトに提案したことを見て、圧縮されたフォーム(1つのping antを送信すると10秒間応答する)が好きかどうかを確認してください。 – louigi600

答えて

2

このお試しください: まず文が間違っている場合 は

if [ $? -ne 0 ] then; 

またはこの他の形式

if [ $? -ne 0 ] 
then 

この形式を使用します。それにはいくつかの問題があります

while ping -c 1 -W 20 "$host" >& /dev/null 
do 
    echo "Host reachable" 
    sleep 10 # do not ping too often 
done 
echo "Host unreachable within 20 seconds" 
+0

ありがとうAlfeこれは私が必要なものを達成! –

1

を第二に、あなたのpingがタイムアウトしていないと思われます。

ping -c 1 -w 2 69.69.69.69 > /dev/null 2>&1 

は、第三に、あなたのループがping時間あれば、あなたが何かを実行すると幸せになる場合は、10

while [ $counter -le 10 ] 

後に終了する場合がありますも、10の後にカウンタをインクリメント続ける参考になっ

かもしれませんx秒後に何も応答せずに凝縮することができます(下の例では10秒)。

ping -c 1 -w 10 69.69.69.69 >/dev/null 2>&1 || echo "run if ping timedout without any response" 
+0

上記の点をありがとうございました!あなたは私が初心者だと言うことができます。 Alfeの解決策が私のために働いたので、私はそれに固執するつもりです。あなたは大いに感謝します。 –

+0

もしそれが良い答えだと思うのであれば、それは有用な答えとしてマークしてください...それは私の評判にも役立ちます;) 私たちは一度も初心者でした:D – louigi600

関連する問題