shell整理(29)===判断用户输入可不可以作为变量
(一)题目: 接受一个用户输入,判断这个输入是否可以作为变量 可以作为变量的条件 (1)大小写字母都可以 (2)字母中间可以有数字,但是不能以数字开头 (3)特殊字符除了“_ ”其他都不可以作为变量 例如:
[root@localhost hushuai]# bash 22.sh Input:1dsf Name is not [root@localhost hushuai]# bash 22.sh Input:=ewr Name is not [root@localhost hushuai]# bash 22.sh Input:_ Name is ok [root@localhost hushuai]# bash 22.sh 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[$?-eq0];then echo$aisnot&&exit0 fi if[$c-eq$b];then echo$aisok else echo$aisnot fi 版本一替换后还要统计个数,很麻烦,我们直接替换成空不就好了吗?在版本(一)基础上的修改 版本(二) shell 代码如下: #!/bin/bash read-p"Input:"a d=`echo$a|cut-c1` echo$d|grep'[0-9]'&>/dev/null if[$?-eq0];then echo$aisnot&&exit0 fi b=`echo$a|sed-r's/[a-zA-Z_0-9]//g'` if[-z$b];then echo$aisok else echo$aisnot fi 这是一种方法因为写了正则,所以比较简单,其实我们还可以一个字母一个字母来比较 例如:版本(三) shell代码如下: #!/bin/bash read-p"PlzInputAname:"n s=${#n} start=`echo$n|cut-c1` check=`echo$start|grep-c'[a-zA-Z_]'` if[$check-ne1];then echo"Namenotok"&&exit1 fi foriin`seq2$s` do xxoo=`echo$n|cut-c$i` check=`echo$xxoo|grep-c'[a-zA-Z_0-9]'` if[$check-ne1];then echo"Namenotok"&&exit1 fi done echo"Nameisok" 上面所有的一切只是提供一种思路和方法;一定要学会在一个问题上多研究研究,其实如果你知道一个命令的话还有另外一种方法 命令:eval 版本(四): #!/bin/bash read-p"Input:"n eval$n=1&>/dev/null if[$?-eq0];then echo"Nameisok" else echo"Nameisnot" fi (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |