免费注册 查看新帖 |

Chinaunix

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

请教:如何把输入的字符自动转换成*?  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-08 21:50 |只看该作者 |倒序浏览
如:
please input your passwd:1234
我想做成:
please input your passwd:****
我知道可以用stty -echo来禁止回显,那么如何把输入的字符变成*呢?
用什么方法可以实现!?
谢谢~~~@_@

论坛徽章:
0
2 [报告]
发表于 2003-06-09 00:28 |只看该作者

请教:如何把输入的字符自动转换成*?

原帖由 "bjgirl" 发表:
如:
please input your passwd:1234
...


  1. #!/bin/sh

  2. getchar() {
  3.     stty cbreak -echo
  4.     dd if=/dev/tty bs=1 count=1 2> /dev/null
  5.     stty -cbreak echo
  6. }

  7. printf "Please input your passwd: "

  8. while : ; do
  9.     ret=`getchar`
  10.     if [ x$ret =  x ]; then
  11.         echo
  12.         break
  13.     fi
  14.     str="$str$ret"
  15.     printf "*"
  16. done

  17. echo "Your password is: $str"

复制代码

论坛徽章:
0
3 [报告]
发表于 2003-06-09 00:48 |只看该作者

请教:如何把输入的字符自动转换成*?

谢谢您的指点

论坛徽章:
0
4 [报告]
发表于 2003-06-09 01:02 |只看该作者

请教:如何把输入的字符自动转换成*?

[quote]原帖由 "bjgirl"]谢谢您的指点[/quote 发表:
   

不要客气。  

不过还有个缺点,就是上面的代码对“回车”和“空格”都认为口令结束,可以用 C 的 getchar() 来处理就不会有这个问题。

好在UNIX口令中一般也没有空格。

论坛徽章:
0
5 [报告]
发表于 2003-06-09 01:12 |只看该作者

请教:如何把输入的字符自动转换成*?

谢谢!我基本有个思路啦~~
if [ x$ret =  x ]

请问JJ,这句是不是有问题???

论坛徽章:
0
6 [报告]
发表于 2003-06-09 01:17 |只看该作者

请教:如何把输入的字符自动转换成*?

原帖由 "bjgirl" 发表:

请问JJ,这句是不是有问题???
   

因为 $ret 有可能为空,产生这样的错误,

[  = "" ]  

所以在等号两边都加上相同的字符,以防止这样的错误

论坛徽章:
0
7 [报告]
发表于 2003-06-09 01:23 |只看该作者

请教:如何把输入的字符自动转换成*?

我用的是红帽8,KSH...有些问题!不麻烦您啦,我自己再慢慢消化一下吧~~,goodnight

论坛徽章:
0
8 [报告]
发表于 2003-06-09 01:24 |只看该作者

请教:如何把输入的字符自动转换成*?

再次感谢

论坛徽章:
0
9 [报告]
发表于 2003-06-09 01:27 |只看该作者

请教:如何把输入的字符自动转换成*?

原帖由 "红袖添香" 发表:
  

所以在等号两边都加上相同的字符,以防止这样的错误
   

哦,是我疏忽了,   写成

[ x"$ret" = x ]

就解决了

谢谢 MM 提醒,

论坛徽章:
0
10 [报告]
发表于 2003-06-09 13:12 |只看该作者

请教:如何把输入的字符自动转换成*?

红JJ,我在KSH上调试通过啦~~,但是有句我不明白,望指点

  1. #!/bin/ksh
  2. function getchar {
  3. stty cbreak -echo
  4. dd if=/dev/tty bs=1 count=1 2> /dev/null
  5. stty -cbreak echo
  6. }
  7. print -n "Please input your passwd: "
  8. while
  9. do
  10. ret=$(getchar)
  11. if [[ -z $ret ]]; then echo; break; fi ;
  12. str=$str$ret                           //这句麻烦您给解释解释
  13. print "*"
  14. done
  15. echo "Your password: $str"
复制代码

谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP