![셸에서 사용자 정의 형식으로 날짜 유효성 검사](https://linux55.com/image/14978/%EC%85%B8%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%EC%9E%90%20%EC%A0%95%EC%9D%98%20%ED%98%95%EC%8B%9D%EC%9C%BC%EB%A1%9C%20%EB%82%A0%EC%A7%9C%20%EC%9C%A0%ED%9A%A8%EC%84%B1%20%EA%B2%80%EC%82%AC.png)
사용자 지정 형식 날짜 유효성 검사를 위한 일반 스크립트를 작성 중입니다. 이게 스크립트야
dateformat=$1
d=$2
date "+$dateformat" -d "$d" > /dev/null 2>&1
if [ $? != 0 ]
then
echo "Date $d NOT a valid YYYY-MM-DD date"
exit 1
fi
문제는
sh -x poc_col_val_date.sh "%Y-%m-%d" "2019-11-09"
유효한 날짜가 예상되며 출력이 정확합니다.sh -x poc_col_val_date.sh "%d-%m-%Y" "2019-11-09"
잘못된 날짜가 예상됩니다. 출력은 유효한 날짜입니다.
답변1
여기서는 Perl을 사용할 수 있습니다. 이는 핵심 모듈 Time::Piece를 사용합니다.
valid_date() {
# this function returns with the exit status of the perl command
perl -MTime::Piece -se 'Time::Piece->strptime($date, $fmt)' -- -fmt="$1" -date="$2" 2>/dev/null
}
그래서
valid_date '%Y-%m-%d' '2019-11-09' && echo Y || echo N # => Y
valid_date '%d/%m/%y' '2019-11-09' && echo Y || echo N # => N
답변2
아래 스크립트로 테스트해 보니 유효한 날짜와 유효하지 않은 날짜를 이해할 수 있을 것입니다.
#!/bin/bash
d="2021-03-20"
z="20-03-2021"
date +%Y-%m-%d -d "$d"
if [ $? -eq 0 ]
then
echo "its valid date"
fi
echo "========================="
date +%d-%m-%Y -d "$d"
if [ $? -eq 0 ]
then
echo "its valid date"
fi
echo "========================"
date +%Y-%m-%d -d "$z"
if [ $? -ne 0 ]
then
echo "its not a valid date"
fi
output
2021-03-20
its valid date
=========================
20-03-2021
its valid date
========================
date: invalid date ‘20-03-2021’
its not a valid date