Bash密码特殊字符检查器

时间:2014-10-23 06:12:54

标签: bash passwords

所以基本上我试着让我的密码验证器检查我的密码,看它只包含一个且只有一个特殊字符(@ $#!*&)

到目前为止,我得到它以便它可以识别下面的参数中是否没有特殊字符,但我似乎无法弄清楚如何制作一个声明,使它能够识别它们是密码中只有一个特殊字符。

if [ `echo $password | grep -c -E "[@#$%&*+-=]+"` -eq 0 ]; then
echo "Error"
fi

1 个答案:

答案 0 :(得分:0)

要验证组@#$%&*+-=中是否只有一个字符,请运行:

p=${password//[^@#$%&*+=-]/}; [ "${#p}" -eq 1 ] || echo "Error"

请注意,在正则表达式[^@#$%&*+=-]中,-出现的位置很重要。它必须是第一个字符(在^之后)或最后一个字符。如果它在中间,它将被解释为指示一系列字符。

或者,要验证这些字符中有一个或多个

[ "${password//[^@#$%&*+=-]/}" ] || echo "Error"

至于你在评论中提到的其他测试:

  1. 要验证至少有一个小写字母:

    [ "${password}" = "${password^^}" ] && echo "Error"
    

    ${password^^}将所有字​​符转换为大写字母。如果这使password保持不变,则不会显示小写字母并显示Error

  2. 要验证至少有一个大写字母:

    [ "${password}" = "${password,,}" ] && echo "Error"
    

    ${password,,}将所有字​​符转换为小写字母。如果这使password保持不变,则不会显示大写字符并显示Error

  3. 要验证至少有一个号码:

    [ "${password//[^0-9]/}" ] || echo "Error"
    

    ${password//[^0-9]/}删除password中的所有非数字。如果此后没有剩余字符,则会显示Error

  4. 所有这些测试都基于bash参数扩展。