资源描述
精品文档1欢迎下载一绪论 1.1 设计背景Linux 是一套免费使用和自由传播的类Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多CPU 的操作系统。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它主要用于基于In tel x86 系列 CPU 的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的。 1.2 设计目的在 Linux 系统的/etc 目录下有这样一个文件 passwd,该文件里包含系统中所有用户信 息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组 ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。你们可以通过创建一些UNIX/LINUX shell 脚本文件来满足以上需求。二需求分析 2.1 系统概述2.1.1 任务概述Linux 作为多用户、多任务的操作系统,其系统资源是所有用户共享的。对用户的管理是操作系统的重点。LINUX 课程设计要用 shell 编程实现,将理论学习付诸实践。设计一个 脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。2.1.2 需求规定程序要包括四个文件,即menu add, delete , passwd 四个文件。passwd 文件是用来保存用户信息;menu 文件是主菜单,要求运行的时候能显示一个菜单供用户选择;addusers文件是用来增加信息;deluser 文件是用来删除信息。在主 Shell 脚本文件里(必须以 menu 命名)要有一个多操作选项的菜单以便用户从中选择。对于任务 6 和 7,需要编写单独的 Shell精品文档2欢迎下载脚本文件(必须分别命名为 addusers 和 deluser )并且在主脚本 menu 文件中调用这些脚本文件。 2.2功能需求在主 Shell 脚本文件里(必须以 menu 命名)要有一个多操作选项的菜单以便用户从中 选择。在不同任务的中,这些操作能自动实现以下功能:1、 在屏幕上显示当前所有用户的记录2、 在屏幕上显示当前所有用户(经过格式化和排序的)的记录3、 只在屏幕上显示用户名和用户ID4、 只在屏幕上显示(经过格式化和排序的)用户名和用户ID5、 查询并显示特定用户的记录6、 往 passwd 文件里增加新的用户记录7、 从 passwd 文件里删除某个用户记录你可以使用 UNIX/LINUX 中一些比较简单的命令或命令组合来执行1、2、3、4、5 的任务。对于任务 6 和 7,你需要编写单独的 Shell 脚本文件(必须分别命名为 addusers 和 deluser )并且在你的主脚本 menu 文件中调用这些脚本文件。三系统设计3.1结构层次图精品文档3欢迎下载S.2.运行流程精品文档4欢迎下载(1)总运行流程主菜单是否正确选择N.提示错误RI是否选Qi-功能实继续选择(2)addusers 模块运行流程用户添加是否正确填写信息添加用户信息提示错误进入主菜单(3)deluser 模块用户运行流程Y精品文档5欢迎下载四系统实现王采单:丈件(E) 编辑匡) 査看(工) 终端CDr-T 用户借息主菜单】*打 E 卩当前所有记录2打卬当前所仃记诫(胳式化后的)皐打印用户名和用户【D4 打印(格或化了的用户窘和用 PID去询特宦记录氛増加新纪录7删除记录O-魁出|你的选择是谓选择 1 :打印当前所有用户你的选抒足:1root X 0 0 roo t /root /b in/ba s hb iat x 1 b in /b in /sb hi/no Log indaeiwn x 2 2 denun /sb in /$b in/no log in adm x 3 4 adm /var/adm Zsh in/no log inIp x 4 7 Lp /va r/spoo 1/ Ipd /sb un/nolog in sync x S 0 sync /sb in /b ini/sync从huidowi x 6 0 !ihu tdoAMi /sb in /sb in/hu idoAMihalt x 7 0 ha 11 /sb in /sbin/haItITUii I x 8 12 mail / va r / spoo 1 /rra i 1 / sb in/no login news x 9 13 neu-s /e t c/aie-Miff -Pre5 s spj ce to conl inu嘗q to qu i 1 .选择 2:打印当前所有用户记录(格式化后)精品文档6欢迎下载你的述抒足:2sync 5shu Kkiwi 6hall 7iw i I &ne ws 9-Msre一-Press space to cont inue q1to quin.选择 4:打印用户名和用户 ID (格式化后)你的选择坠皿r 00 1()b in1 news 9-Mire一 Pre ss spa ce lo cooi l inue rq to qu i l l选择 5:查询特定用户没有输入关键字和输入关键字没有记录:请输入幾漣字:擁还浅仃输入关进宇窗输入关谯字:DM你输入的用户 OHG 不存布请按 Ent 打返冋谓查找到记录:你的选择址:5请输入其谯字:rra i Langra ii Lang: X: SOO: 500: era i lang: /horre / rra i 1 a ng ? /b in/ba sb 请按 En wr 趣冋:|选择 6:添加用户添加成功:文件迥 编辑但) 査看终端 CDCD 转到 甯州户海加roo Lx00oo Ib i itx11b indaenron x22daenmnadm號34udmIpX47】PsyncxS0syncshu IdowX60ha 11x70ha 11mu i 1xH12mH丨ne usK913new/roo t/b in/ba sh/b in/sb in/na Iogin/sb in /sh infno Iog in/va i1/adm/sb in/no log in/va r/s.poo 1 / Ipd /sb in/no log in/sb in /b in/syncshy tdown/sb in /sb in/shu tiiown/sb in /&b in/ha 11/vu r /spoo I /nui i I /shin/no log i n /e t c/newsNbre- Press spuce la canlinue * qlo qu H J选择 3:打印用户名和用户 ID你的选择是:3roo I 0bitt 12dlTl SdaeaToni 2a dmsynchu Ihii 1 lrra i I精品文档7欢迎下载応输入用户?i : ihangsan请输入密码 J 666666请输入确认密码= 666666请输入用户 105003请愉入组0 5003请输入登录 sh 上 11(bashPsh kashPcsh)::&h用户添加成功诘按 Ei】I;|用户名无效情况:用户名只能是数字或字母,用户名不能为空,文件迥編洞匡 杳看世 摆辙 D D 转到 g g 新用卩添蝴三99请输入用户名沱亡鶯用户名只能是垃字或字母请电新输入用户名:请恤人用户名:用户科用陡为空,済車新愉入用户常:请输入用 P 名:IEi请愉人密码*密码无效:密码不能小于 6,密码不能为空,密码只能是数字或字母, 密码必须和确认密码相同请输入密码:23粥码怏度不能小于 E请输入懈码;删驚用户密码只能为数字或字 f 情匣斯输入空码请输入密硏:用户廡码不能为空*请输入密码済输入密码:66666倩输入确认戡码:fdda两次的歸码不匹配请输入密码:666666请输入确认;:66666请输入用户 ID:*用户 ID 无效:用户 ID 不能为空,用户 ID 不能小于 5 0 0,用户 ID 只能为数字请输入出户|用戸【吓能为空请输入用户 JD:d3用户 ID 只能为数字清输入川户 1044用户哪能小于现,请重新输入请输入用户 JD:5004请输入 mrimril l组 ID 无效:组 ID 不能为空,组 ID 不能小于 5 0 0,组 ID 只能为数字精品文档8欢迎下载请输入组|组 iw:陡为空,请車新输入 请输入组 ID 不能小于 500.新输入请输入组 10:(14组 ID 只陡为駛字请输入 ffllI5003请输入 登录 sht HEbashtah kashtcsli) i登录 shell 无效: shell 只能是 bash,sh,kash,csh 中的一种, shell 不能空 i 靑输人 t?shell ba sh , sh ka sh csh):你输入的訪 111 名不存托本系统中.请联新辑人请输入豊录 sheIKbash,sh kashfcsh);te祢输入的 she IL S 不存在本系统屮+请虫新输入请输人席诫 gh(? 1 l【bn ghsh shFcsh) : sh选择 7:删除用户查找用户 ID 存在,是否要删除选 Y,删除成功:上怕巴 编帥上卜fifty)用户删除输入用 ID:502是再要捌除(Y#N:Y删除成功请按 En te r ili I1:|用户 ID 不存在和没有输入用户ID 情况:文件世)谕轉(E)杳看 Q9fflPWJ 除输入用户 【D 用户 ID不能为空 输入用户10;5009 用户不存在i 许 fficEnter 返冋:1用户 ID 存在,在确认删除选 N 和其他字符是退出:rqcM loc3Lbo LrooLlocalliosL文件(E) 编辑査看 Q9用户删除愉入 H户】D:003是否羡副除WN:N| roo tl oca Iho t r oo I # I选择 Q 退出文件迥编辑 査右09终 用户删除输入用户 10:5003 是否要剧除(Y/N):d精品文档9欢迎下载精品文档10欢迎下载rmplocalhiasL丈件迥 爵揖 查看瞪 终端 用户信息主菜单1.打印为前所盯记录2 打印叫前所格兀化后的) 竟打印用户名扣用户 ID4+打 tin 擀式化了的用户名和川户ID5.査训转宦记出鼻增加新紀录了鼻除记录O-退出你的选抒址:Qroo t loca Ihos i roo t fl不正确选择:o阻 kKalbom文杵世) 编辑述? 査看(艺 终端 用户信息主菜单1.打印当前所有记录2 打印当前所冇记录(賂式优后的 煮打印用户名和出户 ID4.打印(格式化了的用户名和用户 ND 氣査河特:定记录氛增加新纪衆九删隠记录0退出你的选择是诃J nvaI id op t ion胡按 En 沖返冋:|五代码实现1)主菜单代码#! /bi n/bash#删除用户clearecho 用户删除 ”echo=while truedoread -p 输入用户 ID: useridsif( test expr match $userids 0-9* -ne expr length $userids) thenecho 输入的用户 ID 只能是数字,请重新输入elif ( test -z $userids ) the necho 用户 ID 不能为空elsebreakfidonegetuserid=$( awk -F : $3 = $userids print $3 passwd ) if ( test $getuserid ) thenread -p 是否要删除 (Y/N): ackif (test $ack = Y ) then精品文档11欢。迎下载sed -i /$userids/d passwdif ( test $? -eq 0) thenecho 删除成功 elseecho 删除失败 breakfielsebreakfielseecho 用户不存在 fi2)用户添加代码#! /bin/bashclear#用户名echo 新用户添加 echo =while truedoecho -n 请输入用户名 :read usernamea= expr match $username 0-9a-zA-Z* b= expr len gth $user name if ( test $a -ne $b ) thenecho 用户名只能是数字或字母 , 请重新输入用户名 :elif ( test -z $username ) thenecho 用户名不能为空 ,请重新输入用户名 :elsebreakfidone#用户密码while truedoread -p 请输入密码 : passwdif ( test expr match $passwd 0-9a-zA-Z* -ne expr length $passwd ) thenecho 用户密码只能为数字或字母 , 情重新输入密码 elif ( test -z $passwd ) thenecho 用户密码不能为空 , 请输入密码 elif ( test expr len gth $passwd -It 6 ) the necho 密码长度不能小于 6精品文档12欢。迎下载elseread -p 请输入确认密码 : ackpwif(test $passwd = $ackpw ) thenbreakelseecho 两次的密码不匹配 fifidone#用户 IDwhile truedoread -p 请输入用户 ID: useridif ( test expr match $userid 0-9* -ne expr length $userid ) thenecho 用户 ID 只能为数字 elif ( test -z $userid) thenecho 用户 ID 不能为空 elif ( test $userid -lt 500 ) thenecho 用户 ID 不能小于 500,请重新输入 elsebreakfidone#组 IDwhile truedoread -p 请输入组 ID: groupidif ( test expr match $groupid 0-9* -ne expr length $groupid ) thenecho 组 ID 只能为数字 elif ( test -z $groupid ) thenecho 组 ID 不能为空 , 请重新输入 elif ( test $groupid -lt 500 ) thenecho 组 ID 不能小于 500, 请重新输入 elsebreakfidone#登录 shellwhile truedoread -p 请输入登录 shell(bash,sh kash,csh): shellnameif (test $shellname != bash -a $shellname != sh -a $shellname != kash-a $shellname != csh ) thenecho 你输入的 shell 名不存在本系统中 , 请重新输入 elsebreak精品文档13欢。迎下载fidone#添加用户userinfo=$username:$passwd:$userid:$groupid:$username:/home/$username:/bin/$sh ellnameif ( test $? -ne 1 ) thenecho $userinfo passwdif ( test $? -eq 0 ) thenecho 用户添加成功 elseecho 用户添加失败 fifi3)用户删除代码#! /bin/bash#删除用户clearecho 用户删除 echo =while truedoread -p 输入用户 ID: useridsif( test expr match $userids 0-9* -ne expr len gth $userids ) the necho 输入的用户 ID 只能是数字,请重新输入elif ( test -z $userids ) thenecho 用户 ID 不能为空 elsebreakfidonegetuserid=$( awk -F : $3 = $userids print $3 passwd )if ( test $getuserid ) thenread -p 是否要删除 (Y/N): ackif (test $ack = Y ) thensed -i /$userids/d passwdif ( test $? -eq 0) thenecho 删除成功 elseecho 删除失败 breakfielsebreakfi精品文档14欢。迎下载elseecho 用户不存在 fi六 心得体会在本次 shell 大作业中,学习了很多知识,掌握的很多 Linux 的相关命令,同时也对 Linux 有了更深的了解,在 shell 编程中也找到了一些技巧,加深了对 shell 编程的能力和 认识。这也对自己以后的学习 Linux 知识更见有帮助。在实现这些功能时,边学习边尝试, 查阅相关知识和书本。在此期间虽然有些烦躁,但是能够实现功能也是一件很快乐的事。精品文档13欢迎下载欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议, 策划案计划书,学习资料等等打造全网一站式需求
展开阅读全文