昨日、日付が正しくフォーマットされていることを確認する方法について質問しました。自分でテストを作成しようとしたため、これはもう少し的を絞ったものであり、期待どおりに動作していません。(私はLinuxが初めてなので、これはかなりの量です)
YYYYMMDD として入力された日付が必要です。if文の冒頭は基本的に[[$tDateがゼロ文字列かどうか、日付がYYYYMMDDでないかどうかをチェックする]]をチェックするべきだと思います。
コードを実行すると、日付は $lastCOB (昨日、最終営業日) になりますが、日付を入力すると (または日付を変更しないと)、「Invalid date. Please enter the correct format
.」が表示されます。つまり、明らかに、テストは形式が正しいとは信じていませんが、希望どおりに YYYYMMDD として入力されています。
tDate=$(lastCOB)
tDateOkay=0
until [[ $tDateOkay -eq 1 ]] ; do
echo "$tDate"
echo "$tDateOkay"
read -p "Please Enter date for search. Use format: Date (YYYYMMDD): " -e -i "$tDate" tDate
if [[ -z "$tDate" || "$(date --date=$tDate + '%Y%m%d' 2>&1 )" != $tDate ]] ; then
echo "Invalid date. Please enter date in the correct format."
elif [[ $tDate -gt $(today) || $tDate -eq $(today) ]] ; then
echo "Date must be in the past. Please try again."
else
tDateOkay=1
fi
done
最初の if ステートメントは、フォーマットをテストする必要があります。elif ステートメントは、日付が未来ではなく、今日でもないことを確認するためにテストする必要があります。両方のテストに合格した場合、tDateOkay はゼロから 1 に変わり、プログラムはその日付を将来のデータ検索の入力として使用する必要があります。明確にするために何か追加する必要がある場合はお知らせください。