다음과 같은 스크립트가 있습니다.
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를 사용합니다. 이것이 바로 여러분에게 필요한 것입니다.