原创
©著作权归作者所有:来自51CTO博客作者大雪儿的原创作品,谢绝转载,否则将追究法律责任
(一)题目:
接受一个用户输入,判断这个输入是否可以作为变量
可以作为变量的条件
(1)大小写字母都可以
(2)字母中间可以有数字,但是不能以数字开头
(3)特殊字符除了“_ ”其他都不可以作为变量
例如:
[root@localhost hushuai]# bash
Input:1dsf
Name is not
[root@localhost hushuai]# bash
Input:=ewr
Name is not
[root@localhost hushuai]# bash
Input:_
Name is ok
[root@localhost hushuai]# bash
Input:_123
Name is ok
[root@localhost hushuai]#
shell 代码如下:
版本1:
#!/bin/bash read -p "Input:" a b=`echo $a | sed -r 's/[a-zA-Z0-9_]/a/g'|grep -o 'a'|wc -l` c=${#a} d=`echo $a |cut -c1` echo $d | grep '[0-9]' &>/dev/null if [ $? -eq 0 ];then echo $a is not && exit 0 fi if [ $c -eq $b ];then echo $a is ok else echo $a is not fi1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.
版本一替换后还要统计个数,很麻烦,我们直接替换成空不就好了吗?在版本(一)基础上的修改
版本(二)
shell 代码如下:
#!/bin/bash read -p "Input:" a d=`echo $a |cut -c1` echo $d | grep '[0-9]' &>/dev/null if [ $? -eq 0 ];then echo $a is not && exit 0 fi b=`echo $a | sed -r 's/[a-zA-Z_0-9]/ /g'` if [ -z $b ];then echo $a is ok else echo $a is not fi1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.
这是一种方法因为写了正则,所以比较简单,其实我们还可以一个字母一个字母来比较
例如:版本(三)
shell代码如下:
#!/bin/bash read -p "Plz Input A name:" n s=${#n} start=`echo $n |cut -c1` check=`echo $start | grep -c '[a-zA-Z_]'` if [ $check -ne 1 ];then echo "Name not ok" && exit 1 fi for i in `seq 2 $s` do xxoo=`echo $n |cut -c $i` check=`echo $xxoo | grep -c '[a-zA-Z_0-9]'` if [ $check -ne 1 ];then echo "Name not ok" && exit 1 fi done echo "Name is ok"1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.
上面所有的一切只是提供一种思路和方法;一定要学会在一个问题上多研究研究,其实如果你知道一个命令的话还有另外一种方法
命令:eval
版本(四):
#!/bin/bash read -p "Input:" n eval $n=1 &>/dev/null if [ $? -eq 0 ];then echo "Name is ok" else echo "Name is not" fi1.2.3.4.5.6.7.8.9.10. 赞 收藏 评论 举报
相关文章