쉘 스크립트에서 시간을 변경하고 비교하는 방법

쉘 스크립트에서 시간을 변경하고 비교하는 방법

시간을 비교하기 위해 스크립트를 사용하고 있는데 오류가 발생합니다. Quarterly_File.sh: line 139: [[: 0148: value too great for base (error token is "0142").시간(시간) 형식으로 입력을 변경하고 다른 시간과 비교할 수 있는 방법이 있습니까? 내 입력은 다음과 같습니다.

startTime=00:45
endTime=01:30
fileTime=01:42

:아래 그림과 같이 제거하여 비교해보았습니다 .

if (0142 -ge 0045 && 0142 -lt 0130)
    then 
    // my logic
fi

시간 범위는 1시간 범위 내에서 언제든지 가능합니다.

0000    0045,
0030    0130,
2345    0014 (of next day)

답변1

bash 연산자를 어떻게 사용하는지 잘 모르겠지만 (다음과 같이 작동합니다.)

if [ 0142 -ge 0045 ] && [ 0142 -lt 0130 ]; then
    echo "yep"
fi

원하는 코드가 아닌 경우 관련 코드를 최대한 많이 붙여넣으세요.

편집하다:

아래 의견에서 알 수 있듯이 8진수를 (결국 오전 10시 이후) 10진수와 비교하기 때문에 문제가 발생합니다.

date시간을 초로 변환한 다음 비교하는 것이 좋습니다 .

예는 다음과 같습니다:

# grab these however you are currently
time1="01:42"
time2="00:45"
time3="01:42"
time4="01:30"

time1Second=$(date -d "${time1}" +%s)
time2Second=$(date -d "${time2}" +%s)
time3Second=$(date -d "${time3}" +%s)
time4Second=$(date -d "${time4}" +%s)

# then your comparison operators and logic:
if [ "$time1Second" -ge "$time2Second" ] && [ "$time3Second" -lt "$time4second" ]; then
    # logic here
    echo true
fi

이렇게 하면 항상 같은 베이스의 숫자를 비교할 수 있습니다.

답변2

시간을 분으로 변환하고 비교하세요.

startTime=00:45
fileTime=01:42

hr=${startTime/:*} mn=${startTime/*:}      # Split hh:mm into hours and minutes
startMins=$(( ${hr#0} * 60 + ${mn#0} ))    # Minutes since midnight

hr=${fileTime/:*} mn=${fileTime/*:}
fileMins=$(( ${hr#0} * 60 + ${mn#0} ))

if [[ $fileMins -ge $startMins ]]; then : ...; fi

관련 정보