免费注册 查看新帖 |

Chinaunix

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

在SHELL程序中怎么从键盘上一个一个地读取字符? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-01-04 16:44 |只看该作者 |倒序浏览
比如:依次输入“abq回车”。我想把第一个字符存入变量_a中,把第二个字符存入变量_b中,然后当从键盘上读入q时,程序自动退出(也就是说不用输入回车)。
(就是象C语言中的getchar()一样,一个一个读取输入的字符,而不是以回车做为结束符,读取整个字符串。)

论坛徽章:
0
2 [报告]
发表于 2004-01-04 17:05 |只看该作者

在SHELL程序中怎么从键盘上一个一个地读取字符?



  1. getchar()
  2. {
  3. k=`stty -g`
  4. stty -echo
  5. stty raw
  6. dd if=/dev/tty bs=1 count=3 2>/dev/null
  7. stty -raw
  8. stty echo
  9. stty $k
  10. }
  11. echo "input string:\c"   
  12. str=`getchar`   #引用函数
  13. _a=`echo $str|cut -c1-1`
  14. _b=`echo $str|cut -c2-2`
  15. echo "\n"
  16. echo "_a="$_a
  17. echo "_b="$_b

  18. 限输入为三个字符,头两个分别赋给_a,_b 当输入最后一个时退出。
  19. 只是例子,具体要求自已改改看

  20. 若想一个字一个字符读取则把:count=3 改为count=1

复制代码

论坛徽章:
0
3 [报告]
发表于 2004-01-04 17:52 |只看该作者

在SHELL程序中怎么从键盘上一个一个地读取字符?

原帖由 "goldsir" 发表:
比如:依次输入“abq回车”。我想把第一个字符存入变量_a中,把第二个字符存入变量_b中,然后当从键盘上读入q时,程序自动退出(也就是说不用输入回车)。
(就是象C语言中的getchar()一样,一个一个读取输入的字符..........
C的不会!
  1. $cat readkey
  2. #!/bin/ksh
  3. n=1
  4. while ((n<=${#1}));do
  5.         export var[$n]=$(echo $1|cut -c$n)
  6.         ((n+=1))
  7. done
  8. for i in ${var[*]};do
  9.         export _$i=$i
  10. done
  11.         unset n i var
复制代码
结果:
$. readkey sdfasdfsdfasdfwerwer
$echo $_r
r
$. r abcdefghijklmnopqrstuvwxya
$echo $_a
a
$echo $_p
p

论坛徽章:
0
4 [报告]
发表于 2004-01-04 18:43 |只看该作者

在SHELL程序中怎么从键盘上一个一个地读取字符?

2楼的不失为好方法,改改的话可以作为通用函数来使用。count=1
至于判断输入q就退出这个相信楼主能搞定的了。

论坛徽章:
0
5 [报告]
发表于 2004-01-04 19:30 |只看该作者

在SHELL程序中怎么从键盘上一个一个地读取字符?

原帖由 "john_student" 发表:
2楼的不失为好方法,改改的话可以作为通用函数来使用。count=1
至于判断输入q就退出这个相信楼主能搞定的了。


呵呵~实不相瞒,偶也是从坛子里搞来的。

论坛徽章:
0
6 [报告]
发表于 2004-01-04 20:09 |只看该作者

在SHELL程序中怎么从键盘上一个一个地读取字符?

getchar()
{
k=`stty -g`
stty -echo
stty raw
dd if=/dev/tty bs=1 count=1 2>/dev/null
stty -raw
stty echo
stty $k
}

printf "lease input your passwd: "

while : ; do
    ret=`getchar`
    if [ x$ret =  x ]; then
        echo
        break
    fi
    str="$str$ret"
    printf "*"
done

echo "Your password is: $str"
这个程序是以空格做为输入的结束符的,而把回车也做为输入的一个字符。我现在想用回车做为结束符,请问怎样修改呀?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP