bashshell脚本在while条件下执行多个测试
首先,是的,我读过: 答案可能在那篇文章里,但我看不到,所以我希望有人能帮我。我想在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 ! [[ "$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
命令使用子外壳。谢谢,是的,非常正确,我也意识到在发布后,但在讨论另一个答案时,我忘记了这个更改。