bashshell脚本在while条件下执行多个测试

bashshell脚本在while条件下执行多个测试,bash,while-loop,multiple-conditions,Bash,While Loop,Multiple Conditions,首先,是的,我读过: 答案可能在那篇文章里,但我看不到,所以我希望有人能帮我。我想在while循环中测试两个条件,基本上我想结合这两个当前嵌套的测试,一个只是正则表达式,第二个是测试它是否是一个有效日期: while ! [[ "$searchDate" =~ ^[0-9]{1,2}[a-zA-Z]{3}[0-9]{4}$ ]]; do read -p "Enter date in format DDmmmYYYY: " searchDate while ! (date -d

首先,是的,我读过:

答案可能在那篇文章里,但我看不到,所以我希望有人能帮我。我想在while循环中测试两个条件,基本上我想结合这两个当前嵌套的测试,一个只是正则表达式,第二个是测试它是否是一个有效日期:

while ! [[ "$searchDate" =~ ^[0-9]{1,2}[a-zA-Z]{3}[0-9]{4}$ ]]; do
    read -p "Enter date in format DDmmmYYYY: " searchDate

    while ! (date -d $searchDate); do
        read -p "That date doesn't appear to be valid, try again: " searchDate
    done
done
我觉得我应该能够写一些东西,比如:

while [[ ! "$searchDate" =~ ^[0-9]{1,2}[a-zA-Z]{3}[0-9]{4}$ ]] || ( ! date -d $searchDate); do
    read -p "There's something funky about that date, try again: " searchDate
但是我不能让它工作,我不确定是我的逻辑是错的,还是我尝试组合测试的方式(或者两者都是!)…

你可以这样做

while [[ ! "$searchDate" =~ ^[0-9]{1,2}[a-zA-Z]{3}[0-9]{4}$ ]] || ! date -d $searchDate; do
    read -p "Enter date in format DDmmmYYYY: " searchDate
done

只能在
之后立即使用,如果
不能单独放入子shell。@Barmar您可以放入
在任何(单级或多级)管道前面,包括在子shell中的简单命令前面,如下所示。它不是特定于
if
while
的。你评论中的代码没有分配给
searchDate
。没有理由围绕
date
命令使用子外壳。谢谢,是的,非常正确,我也意识到在发布后,但在讨论另一个答案时,我忘记了这个更改。