시간을 비교하는 좋은 방법은 무엇입니까?

시간을 비교하는 좋은 방법은 무엇입니까?

현재 시간을 확인하고 스크립트를 실행해야 하는 정확한 시간이 아닌 경우 스크립트를 중단해야 합니다. 또한 다른 사람이 실행하면 중단되어야 합니다.

예: 오후 10시에서 오전 2시(4시간 창) 사이에 시작할 때만 스크립트를 실행해야 합니다.

현재 나는 다음을 수행하고 있습니다. date +%k%M하드코딩된 숫자와 비교하는 데 시간을 투자하세요

#!/bin/sh
currTime=`date +%k%M`
check_time_to_run()
{
    tempTime=$1
    if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then 
        echo "Time is between 2 AM and 10 PM. Aborting."
        exit 1
    else
        echo "Time is after 10 PM and before 2 AM. Running normally."
    fi
}

check_time_to_run $currentTime

shOR의 시간 비교를 수행하는 다른 효율적인 방법이 있는지 알고 싶습니다 bash.

답변1

이것은 나에게 완벽해 보인다. 개선되어야 한다고 생각하는 이유는 무엇입니까?

어쨌든 개선된 접근 방식은 다음과 같습니다.

  • dash 또는 pdksh와 같이 bash보다 더 작고 빠른 셸을 사용하세요.
  • zsh또는 같은 내장 날짜 함수가 있는 셸을 사용하세요.ksh93
  • 사용 gawk(bash보다 작지만 dash보다 작지만 추가 포크를 피할 수 있음):

예:

#! /usr/bin/gawk -f
BEGIN {now = strftime("%k%M")+0; exit(now > 200 && now < 2200)}

답변2

외부 도구가 허용되는지 확인하고 싶을 수도 있습니다.dateutils.

귀하의 "스크립트"는 다음과 같습니다.

if dtest time --gt '02:00:00' && dtest time --lt '22:00:00'; then
    echo "Time is between 2 AM and 10 PM. Aborting."
fi

면책조항: 저는 이 도구의 작성자입니다.

관련 정보