我昨天问了一个关于尝试确保日期格式正确的问题。这更具针对性,因为我尝试自己编写测试并且它的行为不像我预期的那样。(我是 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,并且程序应该继续使用该日期作为未来数据搜索的输入。让我知道是否需要添加任何内容以清楚起见。