계속하기 전에 연결이 온라인 상태가 될 때까지 기다리는 스크립트에 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를 사용하는 것입니다. 스크립트를 세 가지 변경했습니다.
- sh-bang 라인을 /bin/sh에서 /bin/bash로 변경하세요.
while
$SECONDS를 50과 비교하기 위해 테스트할 두 번째 조건을 추가했습니다.- 선두
$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