在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

查询特定记录

增加新记录

删除记录

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.(所需文件记录不存在)”然后退出。

在以上等待用户做出选择的菜单中,如果用户偶尔输入了一个代码而不是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脚本文件输出的例子:

(此处是主菜单—略)

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

rootx00root/root/bin/bash

zxjx500500zxj303/home/zxj/bin/bash

.

.

.

.

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

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

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

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

(此处是主菜单—略)

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

root,0

zxj,500

.

.

.

.

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

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

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

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

(此处是主菜单—略)

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

root0

zxj500

.

.

.

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

当用户选择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命令显示一个标准的错误信息)。

再增加一个吗?(是)或(否):是(用户输入)

(以上过程从“首先清理用户屏幕”开始,然后重复。

然而,如果用户输入了N,增加记录操作就要退出,然后显示主菜单,以便用户能做其他选择,(比如,现在用户可能想要浏览记录文件中的内容以便确认新记录是否已经添加进文件。)

如果用户偶然打进一个代码而非Y或N,就会退出增加记录操作并显示主菜单。

在add脚本文件的开始,你必须定义一个变量,这个变量存放passwd文件的文件名,并且能在所有涉及到passwd文件的语句中使用它。

在你的shell程序全部完成后你可以自己编三条记录添加到passwd文件中。

你的delete脚本文件

当用户在主菜单中选择7时,你的delete脚本文件必须被调用。下面是示例:

(主菜单如下)

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

(先清屏)删除用户记录

输入用户ID(xxxx): 500(用户输入)

zxj:x:500:500:zxj303:/home/zxj:/bin/bash

你的delete脚本必须要求用户输入有效的用户ID,要求同add脚本。若有用户输入一个无效的用户ID,应显示信息:“无效的用户ID!”,并再次提示用户输入一个用户ID。如果用户简单的按回车键而没有任何输入,显示信息:“没有输入!”,并提示用户再次输入一个用户ID。)

确认删除:(是)或(否):是(用户输入)

记录删除。(此信息只在成功删除新记录之后才显示,如果记录没有成功删除则不能显示此信息。在后面的例子里,UNIX系统将会显示一个标准的错误提示信息)。

(如果用户输入N或者除了Y或N以外的字母的话,删除操作应该退出并显示主菜单。这样能保证用户按Y来删除一个记录)

Delete another? (y)es or (n)o: y (user input)

再删除一个?(是)或(否):是(用户输入)

(以上过程从清屏开始并不断重复)

如果用户输入N或者除了Y或N的字母外,就退出删除操作,显示主菜单。

然而,如果找不到包含有键入用户ID的记录的话,就要输出以下信息:

删除用户记录

输入用户ID(xxxx):5555 (用户输入)

没有找到5555

按回车继续……

(务必使鼠标停留在信息末尾。等用户按了回车后,跳出主菜单。)

在你的delete脚本文件的开始处,你必须定义一个变量,这个变量存放passwd文件的文件名,并且能在所有涉及到passwd文件的语句中使用它。

对大作业的要求:

必须包含你的姓名,学生号以及你的SHELL脚本文件如何使用的简介。你还必须确认在Bash SHELL中可以运行你的脚本文件。为了使你的脚本文件输出更具有可读性,请在合适的地方用”\n”和注释。还要考虑脚本的结构和布局。

如何交你的作业:

你需要分别以硬拷贝(书面形式)和电子文档形式(副本)提交你的shell编程大作业。

你必须提交一份硬拷贝(有一个写上名字的装订好的封面)和一份含下面四个文件的电子拷贝(三份SHELL脚本和一份文本文件)。

menu、add、delete、passwd

收缩

linux程序设计大作业,LINUX/UNIX Shell编程大作业相关推荐

  1. 《Linux与unix Shell编程指南》 总结

    <Linux与unix Shell编程指南> 总结 标签: linux网络dstcron服务器 2011-01-10 18:27 3742人阅读 评论(0) 收藏 举报 分类: Linux ...

  2. 2008年度LINUX与UNIX SHELL编程指北系列大片

    2008年度LINUX与UNIX SHELL编程 指北 系列大片 前言:这个世界是公平的,机会是平等的,学习的机会人人都有,只要你有不甘平庸的上进之心,定会成功! 主演:rootman rootman ...

  3. 【CentOS Linux 7】实验2【Shell编程及应用】

    Linux系统及应用---调研报告 [CentOS Linux 7]实验1[VMware安装.新建虚拟机:63个基础命令运行结果图] [CentOS Linux 7]实验2[Shell编程及应用] [ ...

  4. Linux脚本保存管道中的变量,Linux下管道重定向使用以及Shell编程(操作系统)

    实验名称:Linux的基本操作 实验目的: 1.了解管道和重定向 2.熟悉基本的Linux脚本的编写 实验环境:Ubuntu 12.4(32位,简体中文) 实验内容: 1.将当前用户目录下的文件清单输 ...

  5. 【CentOS Linux 7】实验4【Shell编程】

    Linux系统及应用---调研报告 [CentOS Linux 7]实验1[VMware安装.新建虚拟机:63个基础命令运行结果图] [CentOS Linux 7]实验2[Shell编程及应用] [ ...

  6. Unix网络编程---第一次作业

    Unix网络编程---第一次作业   要求: 客户端:从命令行读入服务器的IP地址:并连接到服务器: 服务器端:    接受客户的连接请求,并显示客户的IP地址和端口号. 实现代码: 1.客户端程序: ...

  7. 【编程实践】Linux / UNIX Shell编程极简教程

    不同于一般的介绍Linux Shell 的文章,本文并未花大篇幅去介绍 Shell 语法,而是以面向"对象" 的方式引入大量的实例介绍 Shell 日常操作,"对象&qu ...

  8. Linux学习(十四)---大数据定制篇Shell编程

    文章目录 一.为什么要学习shell编程 二.Shell 是什么 三.shell 编程快速入门-Shell 脚本的执行方式 3.1 脚本格式要求 3.2 编写第一个 Shell 脚本 3.3 脚本的常 ...

  9. LINUX与UNIX SHELL编程指南 学习笔记

    第1章文件安全与权限 1.2 文件类型 还记得前面一节所提到的文件权限位前面的那个字符吗?我们现在就解释一下这个横杠 所代表的意思,文件类型有七种,它可以从ls -l命令所列出的结果的第一位看出,这七 ...

  10. linux与shell编程指南,LINUX与UNIX SHELL编程指南

    目      录 译者序 前言 第一部分   shell 第1章   文件安全与权限1 1.1   文件1 1.2   文件类型2 1.3   权限2 1.4   改变权限位4 1.4.1   符号模 ...

最新文章

  1. 一主两从的环境,如果主库挂了,如何选举一个从库作为主库?
  2. fcntl函数之文件锁 F_SETLK
  3. 【AI+餐饮】人工智能进军餐饮:AI 调酒,越喝越有
  4. Struts2表单验证的xml配置
  5. python aes加密对于长字符数据丢失_Python 3中AES加密和解密的字符串字节数
  6. openstack连通性检查显示验证失败_从超大规模部署到一体机,浪潮云海引领OpenStack落地新范式...
  7. java 微信小程序 在线学习系统app
  8. html网页设计模板
  9. 费尔防火墙源代码阅读
  10. 工厂模式与抽象工厂模式
  11. Reliability, Availability, Serviceability (RAS) 介绍
  12. Dev - C++ 安装(mac/windows)
  13. Linux更改一个所有者root为只读权限的文件的权限
  14. 解析kubernetes Aggregated API Servers
  15. nim语言为什么弄不出来django那样的web框架
  16. Android11 SystemUI 下拉通知栏取消左右滑动菜单
  17. 企业电子招标采购系统源码+ 前后端分离 + 二次开发+Spring Cloud
  18. .CSV文件在测试中的作用
  19. 7 指数基金那么多,怎么买才好?
  20. java集合 — — Map集合

热门文章

  1. python web框架【补充】自定义web框架
  2. 056 日志的正则式方式加载
  3. WebStorm 6.0下运行pomelo项目
  4. 页面指令JSP常见的指令有哪些?(面试必备)
  5. python怎么设置notebook_JupyterNotebook设置Python环境的方法步骤
  6. java 三维全景_三维全景虚拟现实技术具有三大特点
  7. 配置pytoch版人脸关键点网络pfld docker环境
  8. Scikit-learn快速入门教程和实例(一)(二)
  9. Python-Spyder中文包正式发布!
  10. MNIST数据集格式ubyte转png