(一)题目:
接受一个用户输入,判断这个输入是否可以作为变量
可以作为变量的条件
(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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/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
fi |
版本一替换后还要统计个数,很麻烦,我们直接替换成空不就好了吗?在版本(一)基础上的修改
版本(二)
shell 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/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
fi |
这是一种方法因为写了正则,所以比较简单,其实我们还可以一个字母一个字母来比较
例如:版本(三)
shell代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/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"
|
上面所有的一切只是提供一种思路和方法;一定要学会在一个问题上多研究研究,其实如果你知道一个命令的话还有另外一种方法
命令:eval
版本(四):
1
2
3
4
5
6
7
8
9
10
|
#!/bin/bash read -p "Input:" n
eval $n=1 &> /dev/null
if [ $? - eq 0 ]; then
echo "Name is ok"
else echo "Name is not"
fi
|
本文转自 大雪儿 51CTO博客,原文链接:http://blog.51cto.com/dingxue/1968420,如需转载请自行联系原作者