続行する前に、接続がオンラインになるのを待つスクリプトに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秒の推定値です。
答え2
whileループがない場合:
# -W 50 = timeout after 50 seconds
# -c 1 = 1 packet to be sent
response="$(ping -W 50 -c 1 "$1" | grep '1
packets transmitted, 1 received')"
if [ "$response" == '' ] ; then
echo no response after 50 seconds
else
echo connected
fi