続行する前に、接続がオンラインになるのを待つスクリプトに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つ変更しました。
- sh-bang行を/bin/shから/bin/bashに変更します。
while
$ SECONDSを50と比較するためにテストする2番目の条件を追加しました。- 先頭
$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秒の推定値です。