다른 숫자보다 작은 숫자를 테스트하는 방법

다른 숫자보다 작은 숫자를 테스트하는 방법

다음과 같은 스크립트가 있습니다.

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을 사용합니다. 이것이 바로 여러분이 필요로 하는 것입니다.

관련 정보