je개발 복습/Linux

[ Linux ] Shell 날짜 조회하기

Je-chan 2023. 1. 15. 22:40

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. 참고 자료

https://blog.dalso.org/article/%EC%89%98%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%82%A0%EC%A7%9C-%EC%8B%9C%EA%B0%84-%EA%B4%80%EB%A0%A8-%EB%AA%85%EB%A0%B9%EC%96%B4%EC%98%A4%EB%8A%98%EB%82%A0%EC%A7%9C-%EC%96%B4%EC%A0%9C%EB%82%A0

 

쉘스크립트 날짜/시간 관련 명령어(오늘날짜/어제날짜/내일날짜/현재시간) - 달소씨의 하루

안녕하세요. 달소입니다. 오늘은 쉘스크립트 자동화의 기본이 되는 시간,날짜 구하는 스크립트 생성입니다. 기본적으로 bash쉘에서 제공해주는 date 명령어를 이용한 스크립트로 변수에 집어넣는

blog.dalso.org

https://tod2.tistory.com/31

 

리눅스 쉘에서 어제 날짜 구하기

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