免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8435 | 回复: 9
打印 上一主题 下一主题

请教 bash 中读取键盘输入问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-16 22:14 |只看该作者 |倒序浏览

脚本中,先通过read命令读取输入,接着去执行一段代码,然后需要再次通过read读取用户的输入,
但用户有可能在两次read之间无意识的按了键盘,则第2次的read获取的输入就不是用户真正想输入的。

请教大家怎么解决这个问题:第2次read之前,将用户无意识输入的东西给clear掉?

谢谢。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2011-02-17 09:10 |只看该作者
脚本中,先通过read命令读取输入,接着去执行一段代码,然后需要再次通过read读取用户的输入,
但 ...
cncgz 发表于 2011-02-16 22:14


检查读到的值(内容)....

论坛徽章:
0
3 [报告]
发表于 2011-02-17 09:29 |只看该作者
回复 2# jason680

我的意思是在第2次read时,要将这之前的输出丢弃,以保证第2次read的数据是用户想要的数据。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2011-02-17 09:50 |只看该作者
回复  jason680

我的意思是在第2次read时,要将这之前的输出丢弃,以保证第2次read的数据是用户想要的数 ...
cncgz 发表于 2011-02-17 09:29



    这个...
   我发现read -t 0无法解决这一问题

论坛徽章:
0
5 [报告]
发表于 2011-02-17 10:03 |只看该作者

  1. #!/bin/bash
  2. printf "Please enter your username:"
  3. read NAME
  4. echo "1"
  5. echo "2"
  6. read NAME1
  7. while [ $NAME1 != "a" ]
  8. do
  9.     read NAME1
  10. done
  11. echo "username is $NAME+$NAME1"

复制代码
楼主的逻辑有异议
比如第一次输入为A,第二次要求输入一个数字,输入1是正确的,输入2也是正确的。
你怎么样判断输入是非法输入呢??

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2011-02-17 10:07 |只看该作者
楼主的意思是清除第二次read之前键入的任何字符。无残留,健康。

论坛徽章:
1
摩羯座
日期:2014-05-01 14:18:58
7 [报告]
发表于 2011-02-17 10:26 |只看该作者
木有明白LZ说啥意思。

论坛徽章:
0
8 [报告]
发表于 2011-02-17 10:40 |只看该作者
我来替楼主解释一下

  1. #!/bin/bash

  2. read -p "input : " myvar

  3. sleep 1
  4. echo $myvar

  5. sleep 5

  6. read -p "input again : " mynext

  7. sleep 1
  8. echo $mynext
复制代码
运行
$ bash ba.sh
input : 1
1
aa                   #这个是第2个read调用之前的输入
input again :                                   
aa

论坛徽章:
0
9 [报告]
发表于 2011-02-17 10:47 |只看该作者
本帖最后由 cncgz 于 2011-02-17 10:49 编辑

回复 6# 昭襄王

就是这个意思
以前做个类似,但好久用脚本,忘记了。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
10 [报告]
发表于 2011-02-17 12:09 |只看该作者
回复  昭襄王

就是这个意思
以前做个类似,但好久用脚本,忘记了。
cncgz 发表于 2011-02-17 10:47


这样可以吗?....
  1. read -p "input:" v
  2. echo "input: $v"
  3. sleep 5
  4. for x in `seq 10`
  5. do
  6.   read -t 0.001
  7. done
  8. read -p "input: " v
  9. echo "input: $v"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP