shell 判断变量值是否包含字母、数字、特殊符号等

shell 判断变量值是否包含字母、数字、特殊符号等

变量判断是否包含需求的类型:

[:alnum:] 所有的字母和数字
[:alpha:] 所有字母  
[:digit:] 所有的数字 
[:lower:] 所有的小写字符 
[:upper:] 所有大写字母
[:blank:] 水平制表符,空白等 
[:cntrl:] 所有控制字符
[:graph:] 所有可打印字符,不包括空格 
[:print:] 所有可打印字符,包括空格 
[:punct:] 所有的标点字符 
[:space:] 所有的横向或纵向的空白 

例:利用case进行判断,这个比较简单

#!/bin/bash
while true
do

read -p "请输入一个字符:" VAR
      case "$VAR" in
               [:alpha:]) 
				echo '[:alpha:]字母'
				;;      	
                #[a-z]|[A-Z]) ,与[:alpha:]一样效果
		#		echo '[a-z]|[A-Z]字母'
		#		;;
               [0-9]) 
      			echo '数字'
      			;;
               "+") 
      			echo '+号'
      			;;
               "=")
                echo '=号'  
      			;;

               #....//其它字符,自行添加
               *)
                   echo "检测到不合法字符,结束程序"

                   exit 0;;	
      esac
done

例:判断用户名是否合法

#!/bin/bash
#用户名不能包含特殊字符,仅允许大小写字母、数字
while true
do

echo "用户名仅支持大小写字母、数字,且不能超过10个字符!"
echo "注:只能以字母开头且不支持标点符号"
read -p "请输入:" NAME
if [[ "$NAME" =~ ^[[:alpha:]].* && ! `echo $NAME|grep [[:punct:]]`  && ${#NAME} -le 10 ]];then
echo "您输入的用户名为:$NAME"
echo "合法!"
echo
else
echo "您输入的用户名为:$NAME"
echo "不合法,请重新输入!"
echo
fi
done

解析一下

if中2个&&,表示3个条件是与但关系,必须同时成立(返回值都为0),则then,否则else

第一个条件

"$NAME" =~ ^[[:alpha:]].*

用来判断是否以字符开头,

=~,表示=之后但正则

^,以某某开头

[[:alpha:]],所以字母

.* ,通配符

第二个条件

! `echo $NAME|grep [[:punct:]]`
#可拆分为两个:!和echo $NAME|grep [[:punct:]]

用来判断是否含有标点符号。

!,叹号取反

echo $NAME|grep [[:punct:]],过滤是否含义标点符号

当过滤出标点符号,返回值为0;未过滤出标点,返回是1;过滤返回结果刚好与我们所需相反,所以需要!取反。

第三个条件:

${#NAME} -le 10 

$NAME的字符长度不能超过10个字节,也就是小于等于le

good good study, day day up!

发表评论

textsms
account_circle
email

shell 判断变量值是否包含字母、数字、特殊符号等
变量判断是否包含需求的类型: [:alnum:] 所有的字母和数字 [:alpha:] 所有字母 [:digit:] 所有的数字 [:lower:] 所有的小写字符 [:upper:] 所有大写字母 [:blank:] 水平制表符,空…
扫描二维码继续阅读
2022-04-23