Linux
shell中自定義格式的日期驗證
我正在為自定義格式日期驗證編寫一個通用腳本。這是腳本
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"
預期是無效日期,輸出是有效日期
我使用以下腳本進行了測試,您將了解有效和無效日期
#!/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
你可以在這裡使用 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