需求:檢查檢查密碼是否包含大寫光戈、小寫近顷、數(shù)字、特殊字符和密碼長(zhǎng)度8韩脏。
#!/bin/bash
#檢查檢查密碼是否包含大寫缩麸、小寫、數(shù)字赡矢、特殊字符和密碼長(zhǎng)度杭朱。
for passwd in `cat frepwd.txt`
do
#echo $passwd
strlen=`echo $passwd | grep -E --color '^(.{8,}).*$'`
#密碼長(zhǎng)度是否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]).*$'`
#密碼是否有數(shù)字
#-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中如上正則如合在一起寫就會(huì)存在匹配的順序問(wèn)題吹散。
如:
echo "cHa@ns2017" |grep -E --color '^(.*[a-z]+)(.*[A-Z]+)(.*[0-9]+)(.*\W+).*$'
沒(méi)有返回結(jié)果
echo "cHa4@ns2017" |grep -E --color '^(.*[a-z]+)(.*[A-Z]+)(.*[0-9]+)(.*\W+).*$'
cHa4@ns2017
可以匹配弧械,先匹配小寫、再匹配大寫空民、然后匹配數(shù)字刃唐、再是特殊字符,
為什么會(huì)有匹配順序界轩?還是我的寫法問(wèn)題画饥?待繼續(xù)。