linux程序设计⼤作业,LINUXUNIXShell编程⼤作业
在Linux系统的/etc⽬录下有这样⼀个⽂件passwd,该⽂件⾥包含系统中所有⽤户信息的记录,记录⾥包含每个⽤户的如下信息:⽤户名、密码、⽤户ID、组ID、⽤户全名、⽤户主⽬录和⽤户登录所⽤的shell。请设计⼀个脚本(shell)程序能实现增加、删除、查和显⽰特定⽤户信息的功能。你们可以通过创建⼀些UNIX/LINUX shell 脚本⽂件来满⾜以上需求。
可以⽤任意⼀个⽂本编辑器打开passwd⽂件,该⽂件⾥包含⽤冒号分隔开的字段组成的记录,如下所⽰:
root:x:0:0:root:/root:/bin/bash
zxj:x:500:500:zxj303:/home/zxj:/bin/bash
.
.
.
在主Shell脚本⽂件⾥(必须以 menu 命名)要有⼀个多操作选项的菜单以便⽤户从中选择。在不同任务的中,这些操作能⾃动实现以下功能:
在屏幕上显⽰当前所有⽤户的记录
在屏幕上显⽰当前所有⽤户(经过格式化和排序的)的记录
只在屏幕上显⽰⽤户名和⽤户ID
只在屏幕上显⽰(经过格式化和排序的)⽤户名和⽤户ID
查询并显⽰特定⽤
户的记录
往passwd⽂件⾥增加新的⽤户记录
从passwd⽂件⾥删除某个⽤户记录
你可以使⽤UNIX/LINUX中⼀些⽐较简单的命令或命令组合来执⾏1、2、3、4、5的任务。对于任务6和7,你需要编写单独的Shell脚本⽂件(必须分别命名为add和delete)并且在你的主脚本menu⽂件中调
⽤这些脚本⽂件。
可能你还需要查询⼀些Unix/Linux命令,⽐如awk,、sort、tr、cut、paste、sed、grep;你也可能还需要查询其他的Unix/Linux命令。
建议你在主⽬录下建⽴⼀个以 xx xx xx(xx xx xx为学号)命名的⽬录,并且在本次作业中使⽤它作为⼯作⽬录。
主脚本⽂件中的菜单
在menu脚本⽂件⾥将创建如下菜单,菜单⾥包含供⽤户选择的⼀些操作。
⽤户信息主菜单
打印当前所有记录
打印当前所有记录(格式化后的)
打印⽤户名和⽤户ID
打印(格式化了的)⽤户名和⽤户ID
查询特定记录
增加新记录
你的选择是:(等待⽤户输⼊)
当⽤户做了选择且所选的操作完成之后,应再次显⽰主菜单以供⽤户做下⼀步选择。你必须⽤while循环和case条件语句配合来完成此操作。另外在显⽰主菜单前必须先清除⽤户屏幕。在以下所有步骤中,当显⽰主菜单前都需要先清屏。
在menu脚本⽂件的前⾯部分你⾸先要定义三个变量,这三个变量分别存放passwd、add、delete⽂件的⽂件名,并且能在所有涉及到passwd、add、delete⽂件的语句中使⽤他们。
⽐如,可以定义成:
record_file=passwd
在所有访问passwd⽂件的语句中,只要使⽤ $record_file 即可。这样做的⼀个优点就是,如果以后你需要重新命名记录或者需要在不同的记录⽂件中使⽤你的脚本的话,你只需要修改以上⼀个语句⽽不须在所有有关的记录⽂件⾥逐⼀修改语句。如下定义另外两个变量:
add_file=add
delete_file=delete
定义以上变量之后,你必须核对menu脚本⽂件,看看所需的⽂件(passwd、add、delete)是否准确存放在当前⽬录下。如果其中任何⼀个不存在,你的脚本menu⽂件就必须显⽰以下信息,然后退出:
Required file theMissingFile does not exist.(所需⽂件不存在)
⽐如,如果passwd⽂件不存在,就显⽰“Required file passwd does not exist.(所需⽂件记录不存在)”然后退出。
在以上等待⽤户做出选择的菜单中,如果⽤户偶尔输⼊了⼀个代码⽽不是1、2、3、4、5、6、7或Q,就有信息提⽰“⽆效的代码,请按回车键继续``````”(务必保证光标停留在此信息⾏末尾⽽不是在下⼀⾏的开始处)。等⽤户按了回车键之后,再次显⽰主菜单供⽤户做其他选择。可以允许⽤户使⽤Q或q退出。
在以上等待⽤户做出选择的菜单中,如果⽤户简单地按了回车键(⽽不是输代码)的话,就会出现信息“Selection not entered. Press Enter to continue…"(务必保证光标停留在此信息⾏末尾⽽不是在下⼀⾏的开始处)。等⽤户按了回车键之后,再次显⽰主菜单供⽤户做其他选择。
当⽤户选择了第⼀项——打印当前所有⽤户记录
以下是当⽤户在主菜单中选择第⼀个选项后,menu脚本⽂件输出的内容的例⼦:
(此处是主菜单—略)
你的选择:1(⽤户输⼊)
root x 0 0 root /root /bin/bash
zxj x 500 500 zxj303 /home/zxj /bin/bash
.
.
.
.
按回车键继续。。。(等⽤户按回车键。按后要再次显⽰主菜单)
(注:以上输出内容与passwd⽂件不同之处在于:空格键代替了所有的冒号。你需要哪些Linux命令会这样做。)
当⽤户选择第⼆项时——打印当前经过格式化的⽤户记录后,
以下是当⽤户在主菜单中选择第⼆个选项后,menu脚本⽂件输出的例⼦:
rootx00root/root/bin/bash
zxjx500500zxj303/home/zxj/bin/bash
.
.
.
.
按回车键继续。。。(等⽤户按回车键。按后再次显⽰主菜单)
(说明:以上格式输出是按⽤户名排序的。每列应该左对齐。)
当⽤户选择3时,——打印⽤户名和⽤户ID
以下是当⽤户在主菜单中选择第三个选项后在脚本菜单输出的内容的例⼦:
(此处是主菜单—略)
你的选择:3(⽤户输⼊)
root,0
zxj,500
.
.
.
.
按回车键继续。。。(等⽤户按回车键。按后再次显⽰主菜单)
(注意 以上输出与passwd⽂件内容之间的不同之处。冒号已被逗号代替。每个表⽬[记录]只有显⽰姓名和电话号码。)当⽤户选择4时,——打印(格式化的)⽤户名和⽤户ID
以下是当⽤户在主菜单中选择第四个选项后在脚本菜单输出的内容的例⼦:
(此处是主菜单—略)
你的选择:4(⽤户输⼊)
root0
zxj500
.
.
.
按回车键继续。。。(等⽤户按回车键。按后再次显⽰主菜单)
当⽤户选择5时,——查特定的记录
以下是当⽤户在主菜单中选择第五个选项后在脚本菜单输出的内容的例⼦:
输⼊关键字:Jones (⽤户输⼊)
Jones:x:600:600:Jones Sarah:/home/Jones:/bin/sh
按回车键继续。。。(等⽤户按回车键。按后再次显⽰主菜单)linux命令及shell编写
如果输⼊的关键字不在记录⾥,则必须输出相关信息,⽰例如下:
(此处是主菜单—略)
你的选择是:5(⽤户输⼊)
输⼊关键字:Monks (⽤户输⼊)
没有到Monks
按回车键继续。。。(等⽤户敲回车键。之后再次跳出主菜单)
如果⽤户简单地按回车键⽽不是输⼊关键字,就要产⽣以下输出:
(此处是主菜单)
你的选择是:5(⽤户输⼊)
输⼊关键字:(⽤户简单地按回车键没有输⼊任何东西,即没有键⼊关键字)
没有输⼊关键字
输⼊关键字:(仍然等待⽤户的输⼊)
可以允许输⼊的关键字不区分⼤⼩写(例如JONE和jone的输出结果是⼀样的)
你的add脚本⽂件
当⽤户在主菜单⾥选择6时你的add脚本⽂件就要被调⽤,以下是增加功能的输出⽰例:
(此处是主菜单—略)
你的选择是:6
(先清屏)
⽤户信息增加情况
输⼊新⽤户的具体情况
⽤户名:
密码:
确认密码:
⽤户ID:
组ID:
⽤户全名:
⽤户主⽬录:
登录shell:
你的脚本⽂件必须能使⽤户输⼊⼀个有效的⽤户ID(数字、⼀般⾮超级⽤户的ID⼤等于500)。你的脚本⽂件必须能够识别⽤户输⼊的ID。
没有键⼊ID
⽤户ID:(xxxx):(等待⽤户输⼊⼀个有效的ID)
如果⽤户输⼊的是⼀个⽆效的ID或者是不符合格式的ID,就要输出以下信息:
⽤户ID:(xxxx): abc123 (⽤户输⼊)
⽆效ID
⽤户ID:(xxxx): (等待⽤户输⼊⼀个有效的ID)
对组ID的要求类似与⽤户ID
⽤户名:Warren (⽤户输⼊)
⼀个有效的⽤户名必须只含字母和数字。类似以上所说的,如果⽤户输⼊⼀个⽆效的⽤户名,就应该显⽰这样的信息:“⽤户名只包含字母和数字”,并且提⽰⽤户再次输⼊姓。如果⽤户只按回车没有输⼊的话,则显⽰信息:“没有输⼊⽤户名”,并提⽰⽤户再次输⼊姓。
密码:****** (⽤户输⼊)
输⼊密码时不显⽰或显⽰*,要求密码长度⾄少达到6位以上、且由⼤⼩写字母、数字和控制字符组成;确认密码如果与密码不符应该让⽤户重新输⼊。
主⽬录:Todd(⾮⽤户输⼊,但要根据⽤户名正确显⽰)
⼀个有效的主⽬录名必须根据⽤户名在/home⽬录下正确地添加,要求能在passwd⽂件中的相应记录上⾃动添加主⽬录名,还要在/home ⽬录下⾃动建⽴该名字的⽬录(可以暂不做)。
登录shell:bash(⽤户输⼊)
⼀个有效的shell必须只能是bash、sh、kash、csh中的⼀种。如果⽤户输⼊⼀个⽆效的shell名,就会显⽰这样的信息:“输⼊的shell名不在本系统范围内!”,并且提⽰⽤户再次输⼊。如果⽤户只按回车没有输⼊的话,则显⽰信息:“没有输⼊!”,并提⽰⽤户再次输⼊shell名。
保存记录
(此信息只在成功增加新记录之后才显⽰,如果新的记录没有成功增加则不能显⽰次信息。在后⾯的例⼦⾥,⽤把内容添加到已存在⽂件上的UNIX命令显⽰⼀个标准的错误信息)。
再增加⼀个吗?(是)或(否):是(⽤户输⼊)
(以上过程从“⾸先清理⽤户屏幕”开始,然后重复。
然⽽,如果⽤户输⼊了N,增加记录操作就要退出,然后显⽰主菜单,以便⽤户能做其他选择,(⽐如,现在⽤户可能想要浏览记录⽂件中的内容以便确认新记录是否已经添加进⽂件。)
如果⽤户偶然打进⼀个代码⽽⾮Y或N,就会退出增加记录操作并显⽰主菜单。
在add脚本⽂件的开始,你必须定义⼀个变量,这个变量存放passwd⽂件的⽂件名,并且能在所有涉及到passwd⽂件的语句中使⽤它。
在你的shell程序全部完成后你可以⾃⼰编三条记录添加到passwd⽂件中。
你的delete脚本⽂件
当⽤户在主菜单中选择7时,你的delete脚本⽂件必须被调⽤。下⾯是⽰例:
(主菜单如下)
你的选择:7(⽤户输⼊)
(先清屏)删除⽤户记录
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论