免费注册 查看新帖 |

Chinaunix

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

请教“aquino" 等各位老师:此程序如何写 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-04 14:17 |只看该作者 |倒序浏览
一个文本文件userpasswd的内容:
wq   111111
za    987678
qd    6588
我能否用UNIX的SHELL编写一个程序,用户输入的用户名(当然不是/etc/passwd 中的用户)和密码如果和此文本中的用户名和密码相同,就执行另一个SHELL程序,如果不相同则退出程序,用户并能改正自己的密码,当然程序有产生新用户和密码这个功能更好,不知如何编写。
“aquino”等各位老师请指教,谢谢!!!

论坛徽章:
0
2 [报告]
发表于 2003-05-04 16:25 |只看该作者

请教“aquino" 等各位老师:此程序如何写

写得比较简陋,高手还请指教一二

“用户+密码”文件/tmp/pass:

  1. wq 111111
  2. za 987678
  3. qd 6588
复制代码


脚本yz.sh:

  1. #!/bin/sh

  2. echo -n "User name:"
  3. read USERNAME

  4. stty -echo
  5. echo -n "Password:"
  6. read PASSWORD
  7. stty echo
  8. echo

  9. REALPASS=`sed -n /$USERNAME/p /tmp/pass | cut -d' ' -f2`

  10. awk '{print $1}' /tmp/pass | egrep -q $USERNAME   #某些时候egrep可用grep代替

  11. if [ $? -ne 0 ]; then
  12.         echo $USERNAME "DOES NOT EXIST!"
  13. elif [ $PASSWORD = $REALPASS ]; then
  14.         echo "这里做你想做的事"
  15. else
  16.         echo "BAD PASSWORD!"
  17. fi
复制代码



其实稍懂一点编程的人一看脚本内容,再一看/tmp/pass就什么都知道了,所以没有实在意义,这种工作也不是SHELL的强项,应该考虑用C来完成。

论坛徽章:
0
3 [报告]
发表于 2003-05-04 21:35 |只看该作者

请教“aquino" 等各位老师:此程序如何写

sd

论坛徽章:
0
4 [报告]
发表于 2003-05-04 22:12 |只看该作者

请教“aquino" 等各位老师:此程序如何写

cut 的 delimiter 不就是空格么。
你用的什么系统,我在LINUX下是可以的。

论坛徽章:
0
5 [报告]
发表于 2003-05-04 22:20 |只看该作者

请教“aquino" 等各位老师:此程序如何写

ANSI-Escape-Sequence

Move to Position


  1. ESC[row;colH
复制代码


Move the cursor to the (col, row) position. Note that the row comes before column; that is, y comes before x. Either col or row can be omitted. Row and column both start with "1," not zero. (1, 1) corresponds to the top-left corner of the screen.

论坛徽章:
0
6 [报告]
发表于 2003-05-04 23:49 |只看该作者

请教“aquino" 等各位老师:此程序如何写

程序已通过,谢谢!!!再请教一下,用户怎么能够修改自己的密码,并保存在/tmp/passwd 中,在/etc/passwd中增加新用户(当然用 vi 编辑除外),单独写一个小的shell程序吗?请指教,谢谢!!!!!
此程序还存在如下问题:
1。比如:用户名称为:wqlp,密码:111111,我输入用户名称:w,密码:111111,同样可以通过用户验证,如果用户名称我输入“wqlp"中的任何一个字母,只要密码输入正确,用户验证都可以通过,这样好象有点问题,但我输入用户名称:w,对应的密码输错了,那么用户验证则不能通过。
2。如果用户名和密码我都不输,则屏幕提示:
sed:First RE may not be null
egrep:no pattern given
egrep [-c|-l|-q] [bhinsvx] [-e pattern_list] [-f pattern_file] [pattern_list][file...],
请多多指教,谢谢!!!!!!!!!!
不好意识,在多问一个问题:
echo "^[[11;38H",这是一个光标定位,即光标停在11行,38列,但
符号"^"不是”SHILT+^“键,不知怎么输,此符号才起作用。我是”unix5.0.5"
操作系统。谢谢!!!

论坛徽章:
0
7 [报告]
发表于 2003-05-05 10:27 |只看该作者

请教“aquino" 等各位老师:此程序如何写

好难。

第一个问题比较好解决,在sed的pattern  $USERNAME的两边加一个^和一个$就差不多了:
/^${USERNAME}$/

ansi esc sequence中的^[ 是先按ctrl-v, 再打ESC出来的, 后边再接一个[

至于改密码和加用户,可以给脚本加参数,用case语句来选择执行,我的水平有限,自己研究研究吧

论坛徽章:
0
8 [报告]
发表于 2003-05-06 22:14 |只看该作者

请教“aquino" 等各位老师:此程序如何写

REALPASS=`sed -n /^${USERNAME}$/ /tmp/pass | cut -d' ' -f2`
有问题,屏幕提示出错,

论坛徽章:
0
9 [报告]
发表于 2003-05-11 21:25 |只看该作者

请教“aquino" 等各位老师:此程序如何写

请教!!

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

请教“aquino" 等各位老师:此程序如何写

...

用 AWK 取第二域
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP