2014-01-22 15 views
0

할당 된 날짜를 증가시키기 위해 다음 bash 스크립트가 있습니다 : DATE.쉘 스크립트로 날짜 증가시키기

#!/usr/local/bin/bash 

DATE=20130625 

for i in {1..10} 
do 
    NEXT_DATE=$(date +%Y%m%d -d "$DATE + $i day") 
    echo $i $NEXT_DATE 
done 

그러나 오늘 날짜는 다음과 같이 반복해서 인쇄됩니다.

1 20140122 
2 20140122 
3 20140122 
4 20140122 
5 20140122 
6 20140122 
7 20140122 
8 20140122 

도움을 주시면 감사하겠습니다. btw, OS는 Solaris 11입니다. 감사합니다.

+1

Gnu 날짜 인 경우 Solaris에서 '날짜'를 확인 했습니까? '-d '+ x day'' 표현식을 지원한다면? – Kent

+0

우분투에있어이 오류를 복제 할 수 없으므로 Solaris 11의 'date'에 문제가있을 수 있습니까? 또한 유형인지 확실하지 않지만 시작 날짜 인 $ DATE가 아니라 오늘 날짜이기 때문에 어떤 것이 올랐다는 것이 분명해야합니다. – dwanderson

+0

일반적으로 그렇지 않습니다. 따라서 이것이 이유 여야합니다. – fedorqui

답변

1

귀하의 버전이 date 인 경우 해당 날짜 산술 연산을 지원하지 않는 것으로 보입니다. 그러나 Unix 타임 스탬프와의 변환을 지원해야합니다 (자세한 내용은 설명서 참조).

DATE=$(date +%s "$DATE") # Adjust as necessary 
for i in {1..10} 
do 
    seconds=$(($i * 86400)) 
    NEXT_DATE=$(($DATE + $seconds)) 
    echo $i $(date +%Y%m%d -d @$NEXT_DATE) # Adjust as necessary 
done 
+0

Solaris에 대한 액세스 권한이 없기 때문에이 답변은 '날짜'구현에 대한 가정 때문에 유용하지 않을 수 있습니다. – chepner

+0

오류 받기 : "./Date.sh : 15 행 : % s + 86400 : 구문 오류 : 피연산자 예상 (오류 토큰은"% s + 86400 ")"입니다. 나는 루프 라인을 주석 처리하고 $ DATE (루프 이전)을 echo하는 디버그를 설정하고 "% s"를 에코한다. –

+0

'date' 버전에 대한 문서를 확인하여 주어진 날짜를 유닉스 시대 이후의 초 수로 가져 오는 방법이 있는지 확인하십시오. 그렇지 않으면이 대답을 무시할 수 있습니다. – chepner

2

솔라리스 date 명령은 (적어도 솔라리스 8에서 제가 솔라리스 (11) 맨 페이지를 찾을 수 없습니다) 당신의 구문을 지원하고 date 명령 계산을 할 수있는 방법이 없습니다하지 않습니다.

당신은 두 가지 선택이있다 :

  • date 명령과 BASH를 사용하여 잊어 버려요. 대신 Perl, Python 또는 Ruby와 같은 스크립팅 언어를 사용하여 날짜를 처리 할 수 ​​있습니다.
  • Sunfreeware 사이트에서 GNU Coreutils를 다운로드하십시오. GNU Coreutils는 대부분의 Linux 시스템에 나타나는 Date 명령과 동일합니다. 나는 date 명령을 /usr/local/bin에 넣을 것이고, 당신은 $PATH에 넣거나 명령에 GNU 날짜의 전체 디렉토리 경로를 포함시켜야 할 것입니다.
+0

그래, 그걸 들여다 보니/usr/local/bin/date 아래에 GNU Coreutils의 날짜가 발견되어 잘 작동했다. 모두에게 감사드립니다. –

관련 문제