2014-11-26 3 views
2

셸 스크립트에서 날짜를 비교하고 싶습니다. 나는 다음과 같이 사용하고 논리 :셸 스크립트에서 날짜 비교가 제대로 작동하지 않습니다.

화 : 나는 모든 분 crontab을 사용하여 스크립트를 실행하고 그러나

$date_1="Tue Nov 25 23:50:01 CST 2014" 
$date_2=$(date) 
if [ $date_2 -eq $date_1 ] ; then 
     echo "$date2 is equal to $date_1" 
else 
     echo "$date2 is not equal to $date_1" 
fi 


나는 정확하지 않은 로그에 다음 메시지를 받았습니다 Nov 25 23:50:01 CST 2014는 Tue와 동일하지 않습니다. Nov 25 23:50:01 CST 2014

이 곤란한 상황에서 나를 도울 수 있습니까?

+0

또한 현재 날짜의 값이 날짜의 정적 값과 어떻게 같을 수 있습니까? – anubhava

+0

나는 미래의 날짜 값으로 date_1을 정적으로 유지하고 매 순간 crontab에이 스크립트를 스케줄합니다. 그래서 날짜가 일치하자마자 출력이 나오지만 불행히도 여기에서는 일어나지 않습니다 –

+0

Anubhava : 좋은 지적입니다 ...하지만 시간, 분, 초를 예측할 수 있습니까? 약간 이상하다고 생각 하겠지만 논리적으로는 의미가 있습니다. 내일이 언제 될지 알지? – tvCa

답변

2

이 작업이 1 분마다 실행된다고 가정합니다. 당신은 할 수 있습니다 :

date_1="Tue Nov 25 23:50:01 CST 2014" 

dt1=$(date -d "$date_1" '+%Y%m%d%H%M') 

dt2=$(date '+%Y%m%d%H%M') 

if [ "$dt1" -eq "$dt2" ]; then 
     echo "$dt2 is equal to $date_1" 
else 
     echo "$dt2 is not equal to $date_1" 
fi 
+1

감사합니다 Anubhava ... 그것 wworks –

+0

당신은, 다행스럽게 반갑습니다. – anubhava

0

가장 좋은 것은 당신은 아마 코딩 할 것 등, 다음 달 년부터 시작, 숫자처럼 보이도록 날짜 문자열을 포맷하는 것 같거나 크거나 작거나 동일, 경우에 크론 지금 또는 다음 두 번째를 건너 뜁니다 :

date_1=$(date +%Y%m%d%H%M%S) 
sleep 10 
date_2=$(date +%Y%m%d%H%M%S) 
if [ $date_2 -ge $date_1 ] ; then 
    echo "$date_2 is greater than or equal to $date_1" 
else 

    echo "$date_2 is less than $date_1" 
fi 

출력 : 당신이 그것을 설정할 때

20141126063044 is greater than or equal to 20141126063034 

것은 당신이 변수 앞에 $을하지 않으려 조심!

관련 문제