免费注册 查看新帖 |

Chinaunix

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

写了一个密码2次输入、字节校验、输入回显星号*,欢迎拍砖! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-13 09:55 |只看该作者 |倒序浏览
  1. #!/bin/bash
  2. getchar() {
  3.     stty cbreak -echo
  4.     dd if=/dev/tty bs=1 count=1 2> /dev/null
  5.     stty -cbreak echo
  6. }

  7. echo "输入管理员口令(最低8位,最高20位):"
  8. while : ; do
  9.     ret=`getchar`
  10.     if [ x$ret =  x ]; then
  11.         echo
  12.                break
  13.     fi
  14.     adminpw="$adminpw$ret"
  15.     printf "*"
  16. done
  17. echo "再次输入管理员口令(最低8位,最高20位):"
  18. while : ; do
  19.     ret=`getchar`
  20.     if [ x$ret =  x ]; then
  21.         echo
  22.         break
  23.     fi
  24.     readminpw="$readminpw$ret"
  25.     printf "*"
  26. done

  27. while [ "20" -lt "${#adminpw}" -o "8" -gt "${#adminpw}" ];
  28. do
  29.         adminpw=
  30.         readminpw=
  31.         echo "口令长度不符合,请重新输入!"
  32.         echo "输入管理员口令(最低8位,最高20位):"
  33.         while : ; do
  34.             ret=`getchar`
  35.             if [ x$ret =  x ]; then
  36.                 echo
  37.                 break
  38.                 fi
  39.             adminpw="$adminpw$ret"
  40.             printf "*"
  41.         done
  42.         echo "再次输入管理员口令(最低8位,最高20位):"
  43.         while : ; do
  44.             ret=`getchar`
  45.             if [ x$ret =  x ]; then
  46.                 echo
  47.                 break
  48.                 fi
  49.             readminpw="$readminpw$ret"
  50.             printf "*"
  51.         done
  52. done

  53. while [ "$adminpw" != "$readminpw" ];
  54. do
  55.         adminpw=
  56.         readminpw=
  57.         while [ "20" -lt "${#adminpw}" -o "8" -gt "${#adminpw}" ];
  58.         do
  59.                 echo "两次输入的口令不一致,请重新输入!"
  60.                 echo "输入管理员口令(最低8位,最高20位):"
  61.                 while : ; do
  62.                     ret=`getchar`
  63.                     if [ x$ret =  x ]; then
  64.                         echo
  65.                         break
  66.                     fi
  67.                     adminpw="$adminpw$ret"
  68.                     printf "*"
  69.                 done
  70.         done
  71.         echo "再次输入管理员口令(最低8位,最高20位):"
  72.                 while : ; do
  73.                     ret=`getchar`
  74.                     if [ x$ret =  x ]; then
  75.                        echo
  76.                         break
  77.                     fi
  78.                     readminpw="$readminpw$ret"
  79.                     printf "*"
  80.                 done
  81. done
  82. echo "你输入的口令是:$adminpw"
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-07-13 09:57 |只看该作者
有对这个shell所实现的功能有更简洁的写法,还请贴出代码在拍砖!

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
3 [报告]
发表于 2011-07-13 12:24 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2011-07-13 12:33 |只看该作者
可以用read -s
不过没*

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
5 [报告]
发表于 2011-07-13 13:38 |只看该作者
系统不认这个命令:

stty -cbreak echo

好像要改成 stty -echo

论坛徽章:
0
6 [报告]
发表于 2011-07-13 14:59 |只看该作者
mark

论坛徽章:
0
7 [报告]
发表于 2011-07-13 15:27 |只看该作者
输入空格 会不会退出来的?

论坛徽章:
0
8 [报告]
发表于 2011-07-14 12:57 |只看该作者
回复 7# spacehaibin


    会退出来.....有好的建议么?

论坛徽章:
0
9 [报告]
发表于 2011-07-15 10:21 |只看该作者
回复 8# Iveon


    可以再加一个判断,
if [ "${char}" = "^M" ]
        then
                break
fi
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP