Unix 날짜 형식 유효성 검사 스크립트

Unix 날짜 형식 유효성 검사 스크립트

나는 날짜 형식을 확인하기 위해 이 작은 유닉스 쉘 스크립트를 작성했습니다. 내 스크립트는 문자열이 YYYYMMDDHHMISS 형식인지 확인해야 합니다. 이 형식이 아닌 경우 오류 메시지가 전송됩니다.

예를 들어 변수 a를 선언하고 여기에 값을 할당합니다.

a=20150620223405
date "+%Y%m%d%H%M%S" -d $a > /dev/null 2>&1
if [ $? -ne 0 ]
then
echo "Invalid format"
else
echo "Valid format"
fi 

항상 "잘못됨"이라고 표시됩니다. 여기에 오류가 무엇인지, 어떻게 진행해야 하는지 알고 싶습니다.. 감사합니다

답변1

조건부 테스트에서 $?0이 아닌 값을 사용하기 때문에 테스트가 실패합니다. 0이 아닌 이유는 date0이 아닌 종료 상태가 생성되기 때문입니다. 일시적으로 date폐기를 중단하는 경우표준 에러사용하면 > /dev/null 2>&1생성되는 오류 메시지가 표시됩니다. 이는 문제를 식별하는 데 도움이 됩니다.

date: invalid date ‘20150620223405’

이는 date날짜 형식이 허용되지 않음을 의미합니다.

다음을 시도해 볼 수 있습니다.

a=20150620223405
b=$(echo "$a" | sed 's/^\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)$/\1-\2-\3 \4:\5:\6/')
c=$(date "+%Y%m%d%H%M%S" -d "$b" 2>/dev/null)
if test $? -eq 0 -a "$c" = "$a"
then
    echo ok
else
    echo not ok
fi

관련 정보