시간을 비교하는 좋은 방법?


10

적절한 시간이 아니라면 현재 시간을 확인하고 스크립트를 중단해야합니다. 또한 다른 사람이 실행하면 중단해야합니다.

예를 들어, 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

시간 비교 sh또는 관련하여 다른 효율적인 방법이 있는지 알고 싶습니다 bash.


1
두 날짜를 비교해야하는 경우 날짜를 MJD 또는 UNIX 시간으로 변환하십시오 (예 :) date +%s.
Eddy_Em

1
@Eddy 아니오 날짜가 아닙니다. 비교할 시간입니다.
mtk

1
몇 초 만에 더 나을 것이라고 생각합니다. currTime=$(date +%s); lower=$(date +%s --date="2:00"); upper=$(date +%s --date="22:00"); if [$currTime -gt $lower -a $currTime -lt $upper]; then
Eddy_Em

왜 스크립트를 crontab에 넣지 않습니까? 이렇게하면 특정 시간에 실행되도록 할 수 있습니다
BitsOfNix

1
모든 사용자가로 프로세스 시간을 변경할 수 있으므로 faketime스크립트가 안전하지 않습니다. 잠금 파일을 사용하는 것이 더 나은 옵션 일 것입니다.
jofel

답변:


6

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

어쨌든 그것을 개선하는 방법은 다음과 같습니다.

  • dash 또는 pdksh와 같은 bash보다 작고 빠른 쉘을 사용하십시오.
  • 날짜 기능이 내장 된 쉘을 사용 zsh하거나ksh93
  • 사용 gawk(이 bash는보다 작은, 그러나 대시보다하지만 여분의 포크를 피할 수) :

예:

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

그래요 좋아요. 내가하고있는 일이 조잡하거나 악하지 않다는 것을 확인하고 싶었습니다. 제안 해 주셔서 감사합니다.
mtk

4

외부 도구가 허용되는 경우 점검 할 수 있습니다 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

면책 조항 : 나는 상기 도구의 저자입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.