
1. 필요한 이유
이전 Crontab 을 설명할 때, 정기적으로 실행시켜야 하는 명령어가 API 호출이었다. 해당 API 를 호출할 때 Params 로 오늘 날짜와 7일 전 날짜를 넣어줘야 했다. Javascript 나 Java 에서라면 Date 객체를 활용해서 호출하면 되지만 Shell 에서는 어떤 방법이 있는지를 몰랐기에 해당 내용을 구글링 해야 했고, 적절하게 사용해서 명령어를 만들어 낼 수 있었다.
2. date 로 오늘 날짜 조회하기
Shell 로 date 날짜를 가져오는 것은 매우 쉬웠다. Date 객체처럼 date 만 입력해도 현재 시간을 가지고 온다(정확히는 해당 운영체제에서 인식하고 있는 현재 시간)
$ date
# Thu Jan 12 17:12:11 KST 2023
여기서 더 나아가 포맷팅 하는 것도 매우 간편했다. 보통 우리가 ISO 형식에 맞춰서 송수신을 하는데, shell 에서 date 값을 포맷팅하기에 굉장히 간편했다.
$ today=$(date +%Y%m%d)
$ echo $today
# 20230112
$ twoday=$(date +%Y-%m-%d)
$ echo $twoday
# 2023-01-12
이제 내가 원했던 것처럼 일주일 전으로 되돌리기만 하면 모든 것이 끝난다. 이것도 굉장히 간단한 방법이었다.
$ date
# Thu Jan 12 17:12:11 KST 2023
$ weekago=$(date +%Y%m%d --date '7 days ago')
$ echo $weekago
# 20230105
3. String 과 함께 변수 사용하기
이렇게만 하면 끝인 줄 알았지만, 한 가지 문제가 남았다. 내가 params 로 넘겨줄 때 각 today, weekago 는 변수 값이 되어야 하지 String 그 자체가 되어서는 안 된다. 즉 weekago 값이 '20230105' 로 인식돼야 하는데 'weekago' 로 인식되어 Params Error 가 났다. 이 문제를 해결하기 위해서는 문자열과 변수값을 분리해서 작성해야 했다
'{"startDate": '"${weekago}"', "endDate": '"${today}"'}'
잘보면 문자열이 끝나고 변수명이 있는 것을 새로 작성한 다음 다시 문자열을 시작했다. 자바스크립트로 따지면 다음과 같다
const weekago = '20230105'
const today = '20230112'
"{'startDate': " + weekago + ", 'endDate': " + today + "}"
// Template Literal 이 그리웠다... Shell 로 이렇게 하는 방법이 있나
`{startDate: ${weekAgo}, endDate: ${today}}`
4. 참고 자료
쉘스크립트 날짜/시간 관련 명령어(오늘날짜/어제날짜/내일날짜/현재시간) - 달소씨의 하루
안녕하세요. 달소입니다. 오늘은 쉘스크립트 자동화의 기본이 되는 시간,날짜 구하는 스크립트 생성입니다. 기본적으로 bash쉘에서 제공해주는 date 명령어를 이용한 스크립트로 변수에 집어넣는
blog.dalso.org
리눅스 쉘에서 어제 날짜 구하기
date -d yesterday +%Y%m%d date -d yesterday date -d tomorrow (이건 내일 날짜) date +%Y%m%d --date '1 days ago'date +%Y%m%d --date '2 days ago'date +%Y%m%d --date '1 months ago'date +%Y%m%d --date '1 months 2 days ago'
tod2.tistory.com
'je개발 복습 > Linux' 카테고리의 다른 글
[ Linux ] 크론탭(Crontab), Shell 로 정기적인 명령어 (0) | 2023.01.15 |
---|