2016-04-29 10 views
2

(YYYY-MM-DD)ではない不正な日付形式を入力してもユーザーの入力を修正しようとしていますが、それはわかりません。ここで私が持っているものです。シェルREGEXの日付

while [ "$startDate" != "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" ] 
do 
    echo "Please retype the start date (YYYY-MM-DD):" 
    read startDate 
done 

答えて

4

代わりの!=、あなたがregex comparisonsを実行するために! $var =~ regexを使用する必要があります。

[[ $date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] 
     ^^ 

スクリプトは次のようにすることができるように:

date="" 
while [[ ! $date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; do 
    echo "enter date (YYYY-MM-DD)" 
    read $date 
done 
0

なぜ日付プログラムを使用して間違ったフォーマットを希望のフォーマットに変換しないでください。

$ date -d "06/38/1992" +"%Y-%m-%d" 
1992-06-28 

また、戻り値を確認して変換の失敗を確認することもできます。

$ date -d "06/38/1992" +"%Y-%m-%d" 
date: invalid date ‘06/38/1992’ 

$ [ -z $? ] || echo "Error, failed to parse date" 
関連する問題