Eri*_*ric 2 syntax bash operators
我昨天问了一个问题,试图确保日期格式正确.这稍微有针对性,因为我试图自己编写测试并且它没有按照我的预期行事.(我是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
Run Code Online (Sandbox Code Playgroud)
第一个if语句应该测试格式.elif语句应该测试以确保日期是过去的,而不是将来的,甚至是今天.如果它通过了两个测试,那么tDateOkay应该从零变为1,程序应该继续该日期作为未来数据搜索的输入.如果我需要添加任何内容以便清楚,请告诉我.
我认为你在这一行有一个问题:
if [[ -z "$tDate" || "$(date --date=$tDate + '%Y%m%d' 2>&1 )" != $tDate ]] ; then
Run Code Online (Sandbox Code Playgroud)
它适用于我
if [[ -z "$tDate" || "$(date --date=$tDate '+%Y%m%d' 2>&1 )" != $tDate ]] ; then
Run Code Online (Sandbox Code Playgroud)
也就是说,把+里面的日期格式.
对于将来,我建议2>&1您在确定代码正常时使用.否则调试会更复杂.
顺便说一下,如删除的答案所述,这if [[ || ]]不是最好的POSIX方式.在这篇评论中,我被建议使用if [ ] || [ ].
| 归档时间: |
|
| 查看次数: |
2043 次 |
| 最近记录: |