您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Linux-shell大作业
1Shell大作业说明书题目LINUXShell编程学生姓名学号系别年级专业指导教师完成日期2010年6月25日1一、需求分析1.任务目标Linux作为多用户、多任务的操作系统,其系统资源是所有用户共享的。对用户的管理是操作系统的重点。LINUX课程设计要用shell编程实现,将理论学习付诸实践。设计一个脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。2.系统要求程序要包括四个文件,即menu,add,delete,passwd四个文件。passwd文件是用来保存用户信息;menu文件是主菜单,要求运行的时候能显示一个菜单供用户选择;add文件是用来增加信息;delete文件是用来删除信息。在主Shell脚本文件里(必须以menu命名)要有一个多操作选项的菜单以便用户从中选择。对于任务6和7,需要编写单独的Shell脚本文件(必须分别命名为add和delete)并且在主脚本menu文件中调用这些脚本文件。在主目录下建立一个以07wl-0x-xx(x为班、座号)命名的目录,并且在作业中使用它作为工作目录。3.系统功能在主Shell脚本文件里(即menu文件)要有一个多操作选项的菜单以便用户从中选择。在不同任务的中,这些操作能自动实现以下功能:1、在屏幕上显示当前所有用户的记录2、在屏幕上显示当前所有用户(经过格式化和排序的)的记录3、只在屏幕上显示用户名和用户ID4、只在屏幕上显示(经过格式化和排序的)用户名和用户ID5、查询并显示特定用户的记录6、往passwd文件里增加新的用户记录7、从passwd文件里删除某个用户记录其中:menu文件中的程序完成1,2,3,4,5功能;另外写一个add脚本文件和delete脚本文件分别实现选项6和7.当用户做了选择且所选的操作完成之后,可以再次显示主菜单以供用户做下一步选择。用while循环和case条件语句配合来完成此操作。二、总体设计1.功能图22.流程图2.2.1主菜单显示当前所有用户的记录显示当前所有用户经格式化后的记录显示用户名和用户ID显示格式化后用户名和用户ID查找指定用户信息添加用户信息删除用户信息用户信息主菜单主菜单你的选择功能实现回车退出32.2.2add模块2.2.3delete模块主菜单是否继续删除进入delete界面输入ID是否存在是否删除进入主菜单NYNYY4三、详细设计1.MENU主菜单主菜单在menu脚本文件里将创建如下菜单,菜单里包含供用户选择的一些操作。无效输入当用户做了选择且所选的操作完成之后,应再次显示主菜单以供用户做下一步选择。在以上等待用户做出选择的菜单中,如果用户偶尔输入了一个代码而不是1、2、3、4、5、6、7或Q,就有信息提示“无效的代码,请按回车键继续”。等用户按了回车键之后,再次显示主菜单供用户做其他选择。如图:无输入在以上等待用户做出选择的菜单中,如果用户简单地按了回车键,就会出现信息“无效的代码。等用户按了回车键之后,再次显示主菜单供用户做其他选择。5当用户选择了1时——打印当前所有用户记录当用户选择2时——打印当前经过格式化的用户记录后当用户选择3时,——打印用户名和用户ID当用户选择4时,——打印(格式化的)用户名和用户ID当用户选择5时,——查找特定的记录如果输入的关键字不在记录里6如果用户简单地按回车键而不是输入关键字2.ADD文件当用户在主菜单里选择6时你的add脚本文件就要被调用输入用户名用户输入一个无效的用户名用户只按回车没有输入输入密码输入密码时不显示要求密码长度至少达到6位以上确认密码如果与密码不符应该让用户重新输入7用户ID如果用户只是简单的按回车键如果用户输入的是一个无效的ID或者是不符合格式的ID组ID对组ID的要求类似与用户ID,一个有效的组ID(数字、一般非超级用户的ID大等于500)登录shell一个有效的shell必须只能是bash、sh、kash、csh中的一种如果用户只按回车没有输入的话则显示信息:“没有输入!”,并提示用户再次输入shell名保存记录83.DELETE文件当用户在主菜单中选择7时,你的delete脚本文件必须被调用用户输入一个无效的用户ID用户简单的按回车键而没有任何输入继续删除四、附录(程序代码):1、menu主脚本文件代码#!/bin/sh-#声明全局变量dataSource='passwd';homePath='.';AddUsers=.Add.sh;DeleteUsers=.Delete.sh;CheckDataSourceFileExist(){if[-f$dataSource]then#文件存在9return0;else#文件不存在clear;echo-n警告【$dataSource】不存在!请确认!;read;return1;fi}choice=F;while[$choice!=Q-a$choice!=q]doCheckDataSourceFileExist;if[$?-ne1]thenclear;echo用户信息管理主菜单;echo===========================================================;echo1.显示当前所有记录;echo2.格式化显示当前所有记录;echo3.显示用户名和用户ID;echo4.格式化显示用户名和ID;echo5.查询特定用户信息;echo6.添加新用户;echo7.删除用户;echoQ.退出;echo-n你的选择:;readchoice;#作用是清除由于read到string.Empty的时候引发的bash参数过多的错误。if[-z$choice]thenchoice=empty;ficlear;if[$choice=empty];thenecho选项尚未选择!;elsecase$choicein101)CheckDataSourceFileExist;if[$?-ne1]thenecho当前的所有的用户信息如下所示:;echo用户名密码IDGID说明工作目录登录Shellcat$dataSource|tr:|more;fi;;2)CheckDataSourceFileExist;if[$?-ne1]thenecho当前的所有的用户信息如下所示:;echo-e用户名\t密码\tID\tGID\t说明\t工作目录\t登录Shellsort-k1$dataSource|awk-F:'{print$1\t$2\t$3\t$4\t$5\t$6\t$7\t}'|more;fi;;3)CheckDataSourceFileExist;if[$?-ne1]thenecho当前的所有的用户的用户名和用户ID如下所示:;echo-e用户名,ID;awk-F:'{print$1,$3}'$dataSource|more;fi;;4)CheckDataSourceFileExist;if[$?-ne1]thenecho当前的所有的用户的用户名和用户ID如下所示:;echo-e用户名\tID;awk-F:'{print$1\t$3}'$dataSource|more;fi;;5)CheckDataSourceFileExist;if[$?-ne1]thenkeyWords=;while[-z$keyWords]doecho-n输入搜索关键词:;readkeyWords;if[-z$keyWords]thenecho搜索关键词不能为空,请重新输入!;11fidoneCheckDataSourceFileExist;if[$?-ne1]thengrep-i$keyWords$dataSource;if[$?-eq1]thenecho很遗憾,【$dataSource】文件中,并不存在与$keyWords一致的信息。;fififi;;6)$AddUsers;;7)$DeleteUsers;;Q)printf程序已经退出。;;q)printf程序已经退出。;;*)echo$choice:此选项不是默认提供的功能。请确认。;;esacfiecho-n确认??;read;fidone2、add脚本文件代码clear;isContinue=y;userName=;while[$isContinue=y-o$isContinue=Y]do#用户名处理,输入一致到字符串长度不为0为止userName=;while[-z$userName]doecho-n用户名:;12readuserName;if[-z$userName]thenecho错误!用户名是不能为空的,请重新输入!;continue;fiif[`exprmatch$userName[a-zA-Z][0-9a-zA-Z]*`-ne`exprlength$userName`]thenecho错误!用户名的只能由非数字打头的字符和数字组成,请重新输入!;userName=;continue;fidone#密码处理:1.验空,3.密码长度要6位,由大小写字母、数字和控制字符组成,2.验两次输入的一致性,passWord=;passWordAgain=;while[-z$passWord]doecho-n密码:;readpassWord;if[-z$passWord]thenecho错误!密码是不能为空的,请重新输入!;continue;fiif[`exprlength$passWord`-ne6]thenecho密码长度为6位,请重新输入!;passWord=;continue;fiif[`exprmatch$passWord[0-9a-zA-Z]*`-ne`exprlength$passWord`]thenecho密码由大小写字母、数字和控制字符组成,请重新输入!;passWord=;continue;13fiecho-n请在输入一次密码:;readpassWordAgain;if[$passWordAgain!=$passWord]thenecho两次输入的密码不一样,请重新输入!;passWord=;continue;fidone#用户UID输入处理,UID为数字、一般非超级用户的ID大等于500uID=;while[-z$uID]doecho-n用户UID:;readuID;if[-z$uID]thenecho错误!用户UID是不能为空的,请重新输入!;continue;fiif[`exprmatch$uID[0-9]*`-ne`exprlength$uID`]thenecho错误!用户的UID必须为数字,请重新输入!;uID=;continue;fiif[$uID-lt500-o$uID-gt60000]thenecho错误!一般非超级用户的ID范围为500~60000,请重新输入!;uID=;continue;fidone#用户组GID处理gID=;14while[-z$gID]doecho-n用户组GID:;readgID;if[-z$gID]thenecho错误!用户GID是不能为空的,请重新输入!;continue;fiif[`exprmatch$gID[0-9]*`-ne`exprlength$gID`]thenecho错误!用户的GID必须为数字,请重新输入!;gID=;continue;fiif[$gID-lt500-o$gID-gt60000]thenecho错误!用户组的ID范围为500~60000,请重新输入!;gID=;continue;fidoneecho-n说明:;readnote;#bash,sh,csh,kshshellVersion=;while[-z$shellVersion]doecho-n登录SHELL(bash,sh,csh,ksh):;readshellVersion;if[$shellVersion!=bash-a$shellVersion!=sh-a$shellVersion!=csh-a$shellVersion!=ksh]thenecho输入的Shell类型【$shell
本文标题:Linux-shell大作业
链接地址:https://www.777doc.com/doc-5841118 .html