GNU/Linux >> Linux の 問題 >  >> Linux

引数が bash シェルで有効な日付かどうかを確認する

入力日付値 MM-DD-YYYY から日、月、および年の値を抽出し、代わりに明確な (ISO) 形式 YYYY-MM-DD として検証できます (DD-MM-YYY 形式の日付を次のように検証できます)。 25-12-2010 などの日付を使用して「正しい」が、有効な MM-DD-YYY 日付ではないため、最初に日付形式を変更する必要があります)

正しい形式の有効な日付で問題ありません

2005 年 11 月 30 日が有効です:

$ DATE=11-30-2005; d=${DATE:3:2}; m=${DATE:0:2}; Y=${DATE:6:4}; echo "year=$Y, month=$m, day=$d"; if date -d "$Y-$m-$d" &> /dev/null; then echo VALID; else echo INVALID; fi
year=2005, month=11, day=30  
VALID

$ DATE=11-30-2005; if date -d "${DATE:6:4}-${DATE:0:2}-${DATE:3:2}" &> /dev/null; then echo VALID; else echo INVALID; fi
VALID

正しい形式の無効な日付は OK ではありません

2005 年 11 月 31 日は有効ではありません:

$ DATE=11-31-2005; d=${DATE:3:2}; m=${DATE:0:2}; Y=${DATE:6:4}; echo "year=$Y, month=$m, day=$d"; if date -d "$Y-$m-$d" &> /dev/null; then echo VALID; else echo INVALID; fi
year=2005, month=11, day=31  
INVALID

$ DATE=11-31-2005; if date -d "${DATE:6:4}-${DATE:0:2}-${DATE:3:2}" &> /dev/null; then echo VALID; else echo INVALID; fi
INVALID

間違った形式の有効な日付は OK ではありません

DD-MM-YYYY 形式の 1979 年 4 月 20 日は、MM-DD-YYYY の日付として検証されません:

$ DATE=20-04-1979; d=${DATE:3:2}; m=${DATE:0:2}; Y=${DATE:6:4}; echo "year=$Y, month=$m, day=$d"; if date -d "$Y-$m-$d" &> /dev/null; then echo VALID; else echo INVALID; fi
year=1979, month=20, day=04  
INVALID

$ DATE=20-04-1979; if date -d "${DATE:6:4}-${DATE:0:2}-${DATE:3:2}" &> /dev/null; then echo VALID; else echo INVALID; fi
INVALID

別の簡単な方法:BASH 変数文字列を使用して、ハイフンをスラッシュに置き換えます

$ DATE="04-30-2005"; [[ $(date -d "${DATE//-/\/}" 2> /dev/null) ]] && echo VALID || echo INVALID
VALID

$ DATE="04-31-2005"; [[ $(date -d "${DATE//-/\/}" 2> /dev/null) ]] && echo VALID || echo INVALID
INVALID

date -d "datestring" で確認できます

だから date -d "12/31/2012" は有効ですが、ハイフンを使用します。 date -d "12-31-2012"date には無効です .

次の単語も使用できます:date -d 'yesterday' または date -d '1 week ago' 両方とも有効です。


Linux
  1. シェル スクリプトを使用してデータベース接続を確認する

  2. Bash のリストに変数が存在するかどうかを確認する

  3. Shell =変数が#で始まるかどうかを確認します

  1. Linuxでタイムゾーンを確認する方法

  2. Bashシェルのカスタマイズ

  3. シェル変数の関数?

  1. シェルスクリプトBashでサブストリングをチェックする方法は?

  2. Bashシェルスクリプトで改行をエコーする方法

  3. 4 つのサンプル シェル スクリプトで説明されている Bash の特別なパラメーター