linux 输出特定字符串,linux shell实现获取用户输入指定范围的单个字符的两种方法...

方法一:

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 ~]#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值