다음과 같은 스크립트가 있습니다.
while :
do
Start_Time=$(date +"%s")
MAIN PROGRAM GOES HERE (CROPPED TO SHORTEN THINGS)
Run_Time=$(( $(date +"%s") - $Start_Time ))
if [[ $Run_Time < $Wait_Time ]]
then
Delay_Time=$(( $Wait_Time - $Run_Time ))
sleep $Delay_Time
else
echo "Delay exceeded"
echo $Run_Time
echo $Wait_Time
fi
done
그리고 내 문제는 때때로 런타임이 대기 시간보다 작더라도 < 테스트에 실패한다는 것입니다.
다음은 마지막 실행의 출력입니다.
Delay exceeded
Run_Time 4
Wait_Time 30
답변1
다음 코드 조각을 실행해 보세요.
if [[ 5 < 20 ]]
then
echo "5 < 20, as expected"
else
echo "5 is not less than 20, but why?"
fi
그리고 출력은 5 is not less than 20, but why?
. 대답은 <
다음과 같이 문서화된 조건식 연산자를 사용하고 있다는 것입니다.
문자열1 < 문자열2 string1이 현재 로케일에서 사전순으로 string2보다 먼저 정렬되면 참입니다.
그리고 문제는 "20"이 사전순으로(또는 기본적으로 알파벳순으로) "5" 앞에 있다는 것입니다.
당신은 찾고 있습니다:
if (( $Run_Time < $Wait_Time ))
대신에 이것은 산술 평가와 산술 less-than을 사용합니다. 이것이 바로 여러분이 필요로 하는 것입니다.