如下需求:
要求获取用户输一个字符a-zA-Z:
方法一:
echo `echo {a..z}``echo {A..Z}` > /tmp/letterfile
while read -p "please input a letter: " letter
do
((`awk -v var="$letter" 'BEGIN{print length(var)}'` == 1)) && grep -q $letter /tmp/tmpfile && break
done
rm -f /tmp/letterfile
echo "you input letter $letter "
- [root@station1 ~]# cat a.sh
- echo `echo {a..z}``echo {A..Z}` > /tmp/letterfile
- while read -p "please input a letter: " letter
- do
- ((`awk -v var="$letter" 'BEGIN{print length(var)}'` == 1)) && grep -q $letter /tmp/tmpfile && break
- done
- rm -f /tmp/letterfile
- echo "you input letter $letter "
- [root@station1 ~]# chmod +x a.sh
- [root@station1 ~]# ./a.sh
- please input a letter: 123
- please input a letter: abc
- please input a letter: 4
- please input a letter: &
- please input a letter: (
- please input a letter: a
- you input letter a
- [root@station1 ~]#
我已开始是使用expr length $letter 替代wk -v var="$letter" 'BEGIN{print length(var)}'的但是,当你输入*等特殊字符时,会报错。如下:
- [root@station1 ~]# cat data
- while read -p "please input a letter: " letter
- do
- ((`expr length $letter` == 1)) && expr $letter : [[:alnum:]] > /dev/null && break
- done
- echo "you input letter $letter "
- [root@station1 ~]# bash data
- please input a letter: 123
- please input a letter: abc
- please input a letter: a
- you input letter a
- [root@station1 ~]# bash data
- please input a letter: *
- expr: 语法错误
- data: line 3: ((: == 1: syntax error: operand expected (error token is "== 1")
- please input a letter:
方法二:
while read -p "please input a letter: " letter
do
[[ `echo $letter | awk '/^[[:alpha:]]$/{print "1"}'` -eq 1 ]] && break
done
echo "you input letter $letter "
如下:
- [root@station1 ~]# cat b.sh
- while read -p "please input a letter: " letter
- do
- [[ `echo $letter | awk '/^[[:alpha:]]$/{print "1"}'` -eq 1 ]] && break
- done
- echo "you input letter $letter "
- [root@station1 ~]# chmod +x b.sh
- [root@station1 ~]# ./b.sh
- please input a letter: *
- please input a letter: abc
- please input a letter: 234
- please input a letter: )
- please input a letter: T
- you input letter T
- [root@station1 ~]#
阅读(402) | 评论(0) | 转发(0) |