我一直在尝试编写bash脚本,它使用给定的规则验证用户输入:length> 8,至少一个数字,以及其中至少一个:[@,#,$]
因此正则表达式是:
((?=.*\d)(?=.*[@#$%&*+-=]).{8,})
我试过这个,但没有结果:
result=$(echo $1 | egrep "((?=.*\d)(?=.*[@#$%&*+-=]).{8,})")
echo $result
,$1
是输入参数。另外,我想将它包装在IF子句中,但echo
从不输出任何内容。我做错了什么?
答案 0 :(得分:2)
这可能会有所帮助:
[[ ${#1} -ge 8 && $1 =~ [0-9] && $1 =~ [@#$] ]] && result="$1"
或三个grep:
result=$(grep -E '.{8}' <<< "$1" | grep '[0-9]' | grep '[@#$]')