shell检查密码强度

需求:检查检查密码是否包含大写、小写、数字、特殊字符和密码长度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
可以匹配,先匹配小写、再匹配大写、然后匹配数字、再是特殊字符,
为什么会有匹配顺序?还是我的写法问题?待继续。

    原文作者:灼灼2015
    原文地址: https://www.jianshu.com/p/6c34cb6b2b73
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞