본문 바로가기
IT/Linux

[LINUX] 리눅스 쉘 지난달 구하기(윤달 29,30,31일 지난달.sh)

by 스터딩아재 2022. 4. 7.
반응형

 

 

리눅스 쉘 스크립트에서 date 함수를 자주 쓰게 됩니다. date 함수 사용 중 지난달을 구하고 싶은데, 윤달이나 31일에는 어떻게 해야되는지 난감할 때가 있습니다. 지난달을 YYYYMM과 같은 형태로 찾는 법을 알아보겠습니다.

 

 

지난달 찾기 목차

1. date 1 month ago의 문제점
2. 지난달 찾기 스크립트

1. date 1 month ago의 문제점

// 일반적인 지난달 구하는 법
date +%Y%m -d '-1month'
date +%Y%m -d '1 month ago'

 

위 방법은 YYYYMMDD의 날짜형식에서 MM만 -1 해주는 방법입니다.

따라서 지난달이 짧은 3월 29,30,31일이나 지난달이 30일까지 있는 31일에는 아래와 같이 오작동할 수 있습니다.

 

// 2022년 2월 28일까지 있음
date +%Y%m%d -d '-1month' 수행 시

20220329 -> 20220301  // 2022.02.29는 없으니 28일에서 1일이 더해짐
20220330 -> 20220302
20220331 -> 20220303
20221231 -> 20221201

 

1일~28일에 수행할 경우 아무 문제가 없지만, 

만약 매일 지난달 이름의 폴더를 검색해야 한다면? YYYYMM을 찾을 다른 방법을 찾아야 합니다.

 

 

2. 지난달 찾기 스크립트

// 기본형태 우선 수행
YYYYMM=`date +%Y%m -d '-1month'`

// 지난월 조정(29~31일 수행된 경우)
// 오늘날짜 >= 29 AND 오늘날짜와 -1month의 날짜가 같지 않을때
if [ `date +%d` -ge 29 ] && [ `date +%d` -ne `date +%d -d '-1month'` ];
then 
	// 차이나는 일수를 계산해서 한번 더 빼줌
	diff=`date +%d -d '-1month'`; 
	YYYYMM=`date +%Y%m -d "-1month -${diff}day"`;
fi

 

조금 복잡해보일 수 있습니다만 찬찬히 보면 별거없습니다.

지난달이 30일까지 있는 31일의 경우는 -1day를 추가해주기만 하면 되는데

오직 28일까지 있으며 윤달까지 있는 2월을 위해 길어졌습니다.

위 스크립트는 1년 중 언제 수행되더라도 지난달을 찾을 수 있습니다.

 

 

다른 IT글 보러가기 

 

 

'IT' 카테고리의 글 목록

IT, 육아, 게임, 생활정보 등 각종 컨텐츠 노트 겸 공유

studyingazae.tistory.com

 

 

그냥 1~28일에 수행되게 하는게 속 편하긴 합니다.
그리드형

댓글