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

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

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

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를 사용합니다. 이것이 바로 여러분에게 필요한 것입니다.

관련 정보