Bash: while ループのタイマー

Bash: while ループのタイマー

続行する前に、接続がオンラインになるのを待つスクリプトにwhileループがあります。

#!/bin/sh

while ! ping -c1 $1 &>/dev/null
        do echo "Ping Fail - `date`"
done
echo "Host Found - `date`"

再接続には25〜45秒かかります。 50秒以上待つことはできません。 whileループの作業時間を制限する最良の解決策は何ですか?

ベストアンサー1

おおよその方法は、シェルが開始されてからの秒数を計算するbash特殊変数$ SECONDSを使用することです。スクリプトを3つ変更しました。

  1. sh-bang行を/bin/shから/bin/bashに変更します。
  2. while$ SECONDSを50と比較するためにテストする2番目の条件を追加しました。
  3. 先頭$1

新しいスクリプト:

#!/bin/bash

while ! ping -c1 "$1" &>/dev/null; [[ "$SECONDS" -lt 50 ]]
        do echo "Ping Fail - `date`"
done
echo "Host Found - `date`"

Host Found私は50秒のタイムアウトの場合、その説明が誤解を招く可能性があることを指摘したかったのです。ループ後、$ SECONDSを50と比較してタイムアウトが発生したことを確認できます。

ping$SECONDS == 49でループを入力でき、成功または失敗に1秒以上かかることがあるため、これは約50秒の推定値です。

おすすめ記事