需求:检查检查密码是否包含大写、小写、数字、特殊字符和密码长度8。
#!/bin/bash
#检查检查密码是否包含大写、小写、数字、特殊字符和密码长度。
for passwd in `cat frepwd.txt`
do
#echo $passwd
strlen=`echo $passwd | grep -E --color '^(.{8,}).*$'`
#密码长度是否8位以上(包含8位)
strlow=`echo $passwd | grep -E --color '^(.*[a-z]+).*$'`
#密码是否有小写字母
strupp=`echo $passwd | grep -E --color '^(.*[A-Z]).*$'`
#密码是否有大写字母
strts=`echo $passwd | grep -E --color '^(.*\W).*$'`
#密码是否有特殊字符
strnum=`echo $passwd | grep -E --color '^(.*[0-9]).*$'`
#密码是否有数字
#-n 判断字符不为空 返回真
if [ -n "${strlen}" ] && [ -n "${strlow}" ] && [ -n "${strupp}" ] && [ -n "${strts}" ] && [ -n "${strnum}" ]
then
echo $passwd >> newfrepwd.log
else
echo $passwd >> nofrepwd.log
fi
done
在Js中是可以合并在一起的,而在Linux中如上正则如合在一起写就会存在匹配的顺序问题。
如:
echo "cHa@ns2017" |grep -E --color '^(.*[a-z]+)(.*[A-Z]+)(.*[0-9]+)(.*\W+).*$'
没有返回结果
echo "cHa4@ns2017" |grep -E --color '^(.*[a-z]+)(.*[A-Z]+)(.*[0-9]+)(.*\W+).*$'
cHa4@ns2017
可以匹配,先匹配小写、再匹配大写、然后匹配数字、再是特殊字符,
为什么会有匹配顺序?还是我的写法问题?待继续。