본문 바로가기

개발/Languages & Scripts

[Shell] Date Validate Script

날짜 유효성 체크 스크립트 관련하여 글을 기재한다.

유효한 유효성 체크를 가진 스크립트들도 많으나 가장 사용하기 편했기 때문이다.

제약사항으로 BASH 3.0 이상에서 사용가능한 기능이 내포되어있다는 점에만 유의하면 될듯하다.

※ BASH3.0 유효성검사 중 [:digit:]

#!/bin/bash

#--------------------------------------------------------------------------
#-- Set Error if Variable is Not Set
#-- Set Exit if Error is Occured
#--------------------------------------------------------------------------

#set -o nounset
set -o errexit

#--------------------------------------------------------------------------
# // Check Parameter & Define Variable
#--------------------------------------------------------------------------

if [[ $# -lt 1 ]]; then
    if [[ $# != $1 ]]; then
        echo
        echo " *** NOT FOUND DATE ARG : ($1)  ***"
        echo " ex ) ex) ./dateFormat.sh 2019/12/26"
        echo
        exit 1
    fi
fi
DATE=$1

#---------------------------------------------------------------
# // Validate Parameter & Run Script
#---------------------------------------------------------------

func_main() {
    local RST=$(func_date_format_chk ${DATE})
    if [[ -z ${RST} ]]; then
        echo "[ ERROR ] OUT PUT DATA is (${DATE})"
        echo "ex) ./dateFormat.sh 2019/12/26"
    else
        echo "[ INFO ] OUT PUT DATA is ${RST}."
    fi
}

func_date_format_chk() {
    local VAL=$1
    if [[ ${VAL} =~ ^[[:digit:]]{4}(/[[:digit:]]{2})(/[[:digit:]]{2})$ ]]; then
        local CHK=`echo "${VAL}" | awk -F '/' '{ print ( match($1, /^[0-9][0-9][0-9][0-9]$/) && $2 <= 12 && $3 <= 31 ) ? "0" : "1" }'`
        if [[ ${CHK} -eq 0 ]]; then
	    echo "${VAL}" | sed 's#/##g'
	fi
    fi
}

func_main

 

출력결과) 2019/12/26 input 후, 정상적인 결과 20191226 확인가능

 

#- References

[stackoverflow]date-validation-in-unix-shell-script-ksh


[e-book] wicked cool shell scripts


[e-book] wicked cool shell scripts 2nd edition


[tldp]bash ver.3


[GNU]bash_manual

'개발 > Languages & Scripts' 카테고리의 다른 글

(Shell)스크립트 작성시, PWD보다는 정의한 BASE_DIR를...  (0) 2019.10.19
JAVA  (0) 2019.09.26