变量判断是否包含需求的类型:
[: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
发表评论