Bash 如果条件不满足';行不通

Bash 如果条件不满足';行不通,bash,shell,Bash,Shell,用于密码检查的if条件中的正则表达式。条件是: 密码长度必须大于14 它至少应包含1个大写字母 它至少应包含1个小写字母 它至少应包含1个特殊字符 所有这些代码都应该在shell脚本中 请帮帮我。代码总是打印错误 password="Testing@1234Test" correct_password="^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[^A-Za-z0-9]).{14,}$" if [[ $password =~ $correct_password

用于密码检查的if条件中的正则表达式。条件是:

  • 密码长度必须大于14
  • 它至少应包含1个大写字母
  • 它至少应包含1个小写字母
  • 它至少应包含1个特殊字符
  • 所有这些代码都应该在shell脚本中

    请帮帮我。代码总是打印错误

    password="Testing@1234Test"
    correct_password="^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[^A-Za-z0-9]).{14,}$"
    if [[ $password =~ $correct_password ]]; then echo "correct" ; exit
    else echo "wrong"
    fi
    
    试试这个:

    [[ ${#a} -ge 14 && "$a" == *[A-Z]* && "$a" == *[a-z]* && "$a" == *[0-9]* && "$a" == *[@#$*%^\!]* ]]
    

    您需要根据需要在最后一个条件中添加特殊字符,并注意一些特殊字符需要转义。

    Bash regex不支持lookarounds,这是复杂密码regex真正需要的。因此,也许您应该在其他地方处理这个问题,例如在Java或C#等应用程序中。应该指出的是,这是全局性的,而问题特别要求正则表达式(假设OP知道差异)。是的,更具体地说,我需要评估if条件下的正则表达式,它在bash中不起作用,即使正则表达式完全正常。@Technocrat:我给出的glob在if条件下不起作用,或者你是在谈论先前答案中发布的正则表达式吗?@Samarth我说的是正则表达式,而不是那是什么given@Technocrat:在bash中的
    if
    中,必须将
    [[]]
    (而不是
    []]
    )与
    =~
    一起用于正则表达式,或与
    =
    一起用于全局搜索。在这两种情况下,图案必须位于右侧。你在做这些吗?请在问题中显示您的代码。