シェルの日付検証

シェルの日付検証

シェルスクリプトで次の日付形式を確認したい

2015-Jul-13

使用していますが、date -d "2015-Jul-13" +"%Y-%b-%d"次のようにエラーが発生します。

date: invalid date '2015-Jul-13'

ベストアンサー1

GNUはこれをdateサポートしていませんYYYY-MMM-DD。したがって、実際にこの形式で日付を処理する必要がある場合は、パラメータを目的の形式DD-MMM-YYYYに置き換える次の方法を使用して処理できます。date

ymd='2015-Jul-13'

dmy=$(echo "$ymd" | awk -F- '{ OFS=FS; print $3,$2,$1 }')
if date --date "$dmy" >/dev/null 2>&1
then
    echo OK
fi

これは完全なシェルソリューションです。これを分解すると、IFS=-ディレクティブはシェルに空白ではなく-ハイフンを使用して、次のコマンドラインを区別するように指示します。コマンドラインのように変数を解析しますが、今はハイフンで区切り、set $ymdパラメータに値を割り当て、$ymd$1$2 待つ。キャプチャされた3つの値を逆順echo "$3-$2-$1"に出力するだけです。

ymd='2015-Jul-13'

dmy=$(IFS=-; set $ymd; echo "$3-$2-$1")
if date --date "$dmy" >/dev/null 2>&1
then
    echo OK
fi

おすすめ記事