UNIX的shell大作业

发布 2022-09-10 11:20:28 阅读 8444

linux/unix shell编程大作业。

在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 命名)要有一个多操作选项的菜单以便用户从中选择。在以下不同的任务中,通过这些操作能实现以下功能:

1、 在屏幕上显示当前所有用户的记录。

2、 在屏幕上显示当前所有用户(经过按规定格式排列和排序的)的记录。

3、 只在屏幕上显示用户名和用户id

4、 只在屏幕上显示(经过按规定格式排列和排序的)用户名和用户id

5、 查询并显示特定用户的记录。

6、 往passwd文件里增加新的用户记录。

7、 从passwd文件里删除某个用户记录。

可以使用unix/linux中一些比较简单的命令或命令组合来执行项的任务。对于任务6和7,需要编写单独的shell脚本文件(必须分别命名为add和delete)并且在你的主脚本menu文件中调用这些脚本文件。

可能还需要查询一些unix/linux命令,比如awk,、sort、tr、cut、paste、sed、grep;也可能还需要查询其他的unix/linux命令。

建议大家在主目录下建立一个以 10zsb-xx(x座号)命名的目录,并且在本次作业中使用它作为工作目录。

主脚本文件中的菜单。

在menu脚本文件里将创建如下菜单,菜单里包含供用户选择的一些操作。

用户信息主菜单。

1、 打印当前所有记录。

2、 打印当前所有记录(按规定格式排列的)

3、 打印用户名和用户id

4、 打印(按规定格式排列的)用户名和用户id

5、 查询特定记录。

6、 增加新记录。

7、 删除记录。

q——退出。

你的选择是:(等待用户输入)

当用户做了选择且所选的操作完成之后,应再次显示主菜单以供用户做下一步选择。你必须用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.(所需文件记录不存在)”然后退出。

在以上等待用户做出选择的菜单中,如果用户偶尔输入了一个**而不是或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文件不同之处在于:空格键代替了所有的冒号。你需要找找哪些unix命令会这样做。)

当用户选择第二项时——打印当前经过格式化的用户记录后,以下是当用户在主菜单中选择第二个选项后,menu脚本文件输出的例子:

此处是主菜单—略)

你的选择:2(用户输入)

rootx 0 0 rootrootbin/bash

zxjx 500 500 zxj303 /home/zxj /bin/bash

按回车键继续。。。等用户按回车键。按后再次显示主菜单)

说明:以上格式输出是按用户名排序的。每列应该左对齐。)

当用户选择3时,——打印用户名和用户id

以下是当用户在主菜单中选择第三个选项后在脚本菜单输出的内容的例子:

此处是主菜单—略)

你的选择:3(用户输入)

root,0

zxj,500

按回车键继续。。。等用户按回车键。按后再次显示主菜单)

注意以上输出与passwd文件内容之间的不同之处。冒号已被逗号代替。每个表目[记录]只有显示姓名和**号码。)

当用户选择4时,——打印(格式化的)用户名和用户id

以下是当用户在主菜单中选择第四个选项后在脚本菜单输出的内容的例子:

此处是主菜单—略)

你的选择:4(用户输入)

root0zxj500

按回车键继续。。。等用户按回车键。按后再次显示主菜单)

当用户选择5时,——查找特定的记录。

以下是当用户在主菜单中选择第五个选项后在脚本菜单输出的内容的例子:

此处是主菜单—略)

你的选择:5(用户输入)

输入关键字:jones (用户输入)

jones:x:600:600:jones sarah:/home/jones:/bin/sh

按回车键继续。。。等用户按回车键。按后再次显示主菜单)

如果输入的关键字不在记录里,则必须输出相关信息,示例如下:

此处是主菜单—略)

你的选择是:5(用户输入)

输入关键字:monks (用户输入)

没有找到monks

按回车键继续。。。等用户敲回车键。之后再次跳出主菜单)

如果用户简单地按回车键而不是输入关键字,就要产生以下输出:

此处是主菜单)

你的选择是:5(用户输入)

输入关键字:(用户简单地按回车键没有输入任何东西,即没有键入关键字)

没有输入关键字。

输入关键字:(仍然等待用户的输入)

可以允许输入的关键字不区分大小写(例如jone和jone的输出结果是一样的)

你的add脚本文件。

当用户在主菜单里选择6时你的add脚本文件就要被调用,以下是增加功能的输出示例:

此处是主菜单—略)

你的选择是:6

先清屏)用户信息增加情况(全部用英文)

输入新用户的具体情况。

用户名:密码:

确认密码:用户id:

组id:用户全名:

用户主目录:

登录shell:

你的脚本文件必须能使用户输入一个有效的用户id(数字、一般非超级用户的id大等于500)。你的脚本文件必须能够识别用户输入的id。

如果用户只是简单的按回车键,就要输出以下内容:

用户id(xxxx):(由用户简单的按回车)

没有键入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命令显示一个标准的错误信息)。

UNIX的shell大作业11计科张慧

目录 1 引言。2 实验目的及实验环境。2.1实验目的3 2.2实验环境3 3 需求分析。3.1任务目标3 3.1系统要求3 3.3系统功能3 4 实验内容。5 实验流程图。5.1 add模块4 5.2 delete模块5 6 实验步骤。6.1 主脚本文件中的菜单5 6.2 输入错误时的信息显示5 ...

操作系统课程大作业简单shell 附源码

本shell简介 shell 主控程序 400行。对输入的命令进行处理,为各个命令创建进程,运行结束时终止进程。myls 展开指定目录 200行。使用格式 myls dir 参数说明 若dir不为 则展开dir,否则展开当前目录,显示文件创建时间 最后修改时间 大小等基本属性。mycat 文本文件查...

大作业的格式

成绩。oracle数据库系统应用。大作业。题目 自拟,正文要求以上 题目格式要求 小二号黑体,单倍行距 摘要 五号宋体,单倍行距 摘要的目的精炼整篇文章的核心内容。正规的摘要大体包括 目标 针对什么问题 所用方法 结果 总结 注意 结果和结论不是一回事,比如1 1 2中的2是结果,而 相加之后数变大...