35林振伟linux大作业.docx

上传人:b****7 文档编号:10536872 上传时间:2023-02-21 格式:DOCX 页数:25 大小:353.11KB
下载 相关 举报
35林振伟linux大作业.docx_第1页
第1页 / 共25页
35林振伟linux大作业.docx_第2页
第2页 / 共25页
35林振伟linux大作业.docx_第3页
第3页 / 共25页
35林振伟linux大作业.docx_第4页
第4页 / 共25页
35林振伟linux大作业.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

35林振伟linux大作业.docx

《35林振伟linux大作业.docx》由会员分享,可在线阅读,更多相关《35林振伟linux大作业.docx(25页珍藏版)》请在冰豆网上搜索。

35林振伟linux大作业.docx

35林振伟linux大作业

LINUX大作业

课程设计说明书

 

题目LINUX/UNIXShell编程

姓名林振伟

学号120071101235

系别计算机科学系

班级07计本2班

指导教师陈静

完成日期2010年6月26日

 

目录

一、引言3

二、需求分析3

1.任务目标3

2.系统要求3

3.系统功能3

三、总体设计4

1.功能图4

2.流程图4

3.2.1menu主菜单4

3.2.2add模块5

3.2.3delete模块。

四、详细设计6

1.menu主菜单6

4.1.1运行主菜单6

4.1.2在menu脚本文件里将创建菜单6

4.1.3无效输入6

4.1.4无输入7

4.1.5当用户选择1时——打印当前所有用户记录7

4.1.6当用户选择2时——打印当前经过格式化的用户记录后7

4.1.7当用户选择3时——打印用户名和用户ID8

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

4.1.9当用户选择5时——查找特定的记录8

2.add文件9

4.2.1当用户在主菜单里选择6时add脚本文件被调用9

4.2.2输入用户名9

4.2.3输入密码9

4.2.4用户ID10

4.2.5组ID10

4.2.6登录shell10

4.2.7保存记录10

4.2.8是否继续添加11

3.delete文件11

4.3.1当用户在主菜单中选择7时delete脚本文件必须被调用11

4.3.2用户输入一个无效的用户ID11

4.3.3用户简单的按回车键而没有任何输入11

4.3.4找不到包含有键入用户ID的记录11

4.3.5继续删除12

五、代码12

1.menu文件。

2.add文件。

3.delete文件。

一、引言

随着Linux操作系统在网络服务器、嵌入式系统等领域应用的迅速发展。

Linux作为多用户、多任务的操作系统。

任何要使用系统资源者必须先在系统内登记、注册,即开设用户账户,该账户包含用户名、口令、所有的shell等。

为了计算机系统的安全,Linux会对每一个要求进来系统的用户验证用户名和口令。

在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:

用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。

设计一个脚本(shell)程序实现增加、删除、查找和显示特定用户信息的功能。

加深对操作系统原理的理解,掌握实际操作系统的用法,动手实践,通过循序渐进的学习各种管理功能、系统应用,用shell编程实现LINUX课程设计,将理论学习付诸实践,提高操作能力。

二、需求分析

1.任务目标

Linux作为多用户、多任务的操作系统,其系统资源是所有用户共享的。

对用户的管理是操作系统的重点。

LINUX课程设计要用shell编程实现,将理论学习付诸实践。

设计一个脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。

2.系统要求

程序要包括四个文件,即menu,add,delete,passwd四个文件。

passwd文件是用来保存用户信息;menu文件是主菜单,要求运行的时候能显示一个菜单供用户选择;add文件是用来增加信息;delete文件是用来删除信息。

在主Shell脚本文件里(必须以menu命名)要有一个多操作选项的菜单以便用户从中选择。

对于任务6和7,需要编写单独的Shell脚本文件(必须分别命名为add和delete)并且在主脚本menu文件中调用这些脚本文件。

在主目录下建立一个目录,并且在作业中使用它作为工作目录。

3.系统功能

在主Shell脚本文件里(即menu文件)要有一个多操作选项的菜单以便用户从中选择。

在不同任务的中,这些操作能自动实现以下功能:

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

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

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

4、只在屏幕上显示(经过格式化和排序的)用户名和用户ID

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

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

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

其中:

menu文件中的程序完成1,2,3,4,5功能;另外写一个add脚本文件和delete脚本文件分别实现选项6和7.当用户做了选择且所选的操作完成之后,可以再次显示主菜单以供用户做下一步选择。

用while循环和case条件语句配合来完成此操作。

三、总体设计

1.功能图

3.流程图

3.2.1主菜单

3.2.2add模块

3.2.3delete模块

 

四、详细设计

1.menu主菜单

4.1.1主菜单

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

4.1.3无效输入

当用户做了选择且所选的操作完成之后,应再次显示主菜单以供用户做下一步选择。

在以上等待用户做出选择的菜单中,如果用户偶尔输入了一个代码而不是1、2、3、4、5、6、7或Q,就有信息提示“无效的代码,请按回车键继续”。

等用户按了回车键之后,再次显示主菜单供用户做其他选择。

如图:

4.1.4无输入

在以上等待用户做出选择的菜单中,如果用户简单地按了回车键,就会出现信息“无效的代码"。

等用户按了回车键之后,再次显示主菜单供用户做其他选择。

4.1.5当用户选择了1时——打印当前所有用户记录

4.1.6当用户选择2时——打印当前经过格式化的用户记录后

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

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

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

如果输入的关键字不在记录里

如果用户简单地按回车键而不是输入关键字

2.add文件

4.2.1当用户在主菜单里选择6时你的add脚本文件就要被调用

4.2.2输入用户名

用户输入一个无效的用户名

用户只按回车没有输入

4.2.3输入密码

输入密码时不显示

要求密码长度至少达到6位以上

确认密码如果与密码不符应该让用户重新输入

4.2.4用户ID

如果用户只是简单的按回车键

如果用户输入的是一个无效的ID或者是不符合格式的ID

4.2.5组ID

对组ID的要求类似与用户ID,一个有效的组ID(数字、一般非超级用户的ID大等于500)

4.2.6登录shell

一个有效的shell必须只能是bash、sh、kash、csh中的一种

如果用户只按回车没有输入的话则显示信息:

“没有输入!

”,并提示用户再次输入shell名

4.2.7保存记录

4.2.8是否继续添加

3.delete文件

4.3.1当用户在主菜单中选择7时,你的delete脚本文件必须被调用

4.3.2用户输入一个无效的用户ID

4.3.3用户简单的按回车键而没有任何输入

4.3.4找不到包含有键入用户ID的记录

4.3.5继续删除

五、代码

1、menu主脚本文件代码

#!

/bin/sh-

record_file=passwd

add_file=add

delete_file=delete

whiletrue

do

clear

echo"用户信息主菜单"

echo"=============================================="

echo"1、打印当前所有记录"

echo"2、打印当前所有记录(格式化后的)"

echo"3、打印用户名和用户ID"

echo"4、打印(格式化了的)用户名和用户ID"

echo"5、查询特定记录"

echo"6、增加新记录"

echo"7、删除记录"

echo"Q--退出"

echo-n"你的选择是:

"

readchoice

case$choicein

1)cat$record_file|tr":

""";;

2)

#awk-F":

"'($3==0||$3>499&&$3<6000){printf"%-10s%-3s%-10s%-10s%-10s%-10s%-10s/n",$1,$2,$3,$4,$5,$6,$7}'$record_file

cat$record_file|tr":

""\t"|sort-d-k1;;

3)cat$record_file|tr":

"","|cut-f1,3-d,;;

4)cat$record_file|cut-f1,3-d:

|tr":

""\t";;

5)echo-n"输入关键字:

"

readname

whiletest-z$name

do

echo"没有输入关键字"

echo-n"输入关键字:

"

readname

done

if(cut-f1-d:

$record_file|grep-iq^$name)

then

grep-iw^$name$record_file

else

echo"没有找到$name"

fi;;

6)sh$add_file;;

7)sh$delete_file;;

Q)break10;;

q)break10;;

*)echo-n"无效的代码"

esac

iftest"$choice"="6"-o"$choice"="7";then

Break;

fi

echo-n"按回车键继续。

"

readanswer

done

2、add脚本文件代码

#!

/bin/sh-

record_file=passwd

whiletrue

do

clear

echo"用户信息主菜单"

echo"=============================================="

echo"输入新用户的具体情况"

echo""

#======================用户名=========================#

whiletrue

do

echo-n"用户名:

"

readname

iftest-z$name

then

echo"没有输入用户名"

continue

fi

iftest$name="N"-o$name="n"

then

shmenu

exit

fi

if(`echo$name|grep-q'^[A-Za-z0-9]*$'`&&`echo$name|grep-q'^[A-Za-z]'`)

then

if(grep-wq^$name$record_file)

then

echo"该用户名已存在,请重新输入!

"

else

break

fi

else

echo"用户名只包含字母和数字,并且要以字母开头"

continue

fi

done

#====================密码==============================#

whiletrue

do

echo-n"密码:

"

read-spwd1

echo

iftest-z$pwd1

then

echo"密码不能为空!

请重新输入!

"

continue

fi

iftest$pwd1="N"-o$pwd1="n"

then

#shmenu

exit

fi

iftest`exprlength$pwd1`-ge6

then

echo-n"确认密码:

"

read-spwd2

echo

iftest$pwd1=$pwd2

then

break

else

echo"密码不一致!

请重新输入!

"

fi

else

echo"密码长度至少要6位!

请重新输入!

"

fi

done

#=====================用户ID===========================#

whiletrue

do

echo-n"用户ID:

"

readid

iftest-z$id

then

echo"没有键入ID"

continue

fi

iftest$id="N"-o$id="n"

then

#shmenu

exit

fi

if(`echo$id|grep-q'^[0-9]*$'`&&test$id-ge500-a$id-le60000)

then

if(cut-f3-d:

$record_file|grep-w$id)

then

echo"ID已存在,请键入别的ID"

continue

else

break

fi

else

echo"ID必须大于等于500小于等于60000"

continue

fi

done

#=======================组ID==================================#

whiletrue

do

echo-n"组ID:

"

readgid

iftest-z$gid

then

echo"没有键入组ID"

fi

iftest$gid="N"-o$gid="n"

then

#shmenu

exit

fi

if(`echo$gid|grep-q'^[0-9]*$'`&&test$gid-ge500-a$gid-le60000)

then

if(cut-f3-d:

$record_file|grep-w$gid)

then

echo"ID已经存在,请键入别的大于等于500小于60000的数!

"

continue

else

break

fi

else

echo"组ID必须大于等于500小于等于60000"

continue

fi

done

#======================主目录===================================#

echo主目录:

$name

#======================登录shell================================#

whiletrue

do

echo-n登录shell:

readshe

iftest-z$she

then

echo"没有输入!

"

continue

fi

iftest$she="N"-o$she="n"

then

shmenu

exit

fi

iftest$she='bash'-o$she='sh'-o$she='kash'-o$she='csh'

then

break

else

echo"输入的shell名不在本系统范围内!

"

continue

fi

done

#=====================用户全名==================================#

whiletrue

do

echo-n"用户全名:

"

readfullname

iftest-z$fullname

then

echo"没有输入!

"

continue

fi

iftest$fullname="N"-o$fullname="n"

then

#shmenu

exit

fi

break

done

#======================主目录===================================#

echo主目录:

$name

#======================添加用户=================================#

useradd$name:

$pwd1:

$id:

$gid:

$fullname:

/home/$name:

/bin/$she>>$record_file;

echo"保存成功!

"

echo"$name$pwd1$id$gid$fullname/home/$name/bin/$she"

echo-n"再增加一个吗?

(Y/N)"

readchoice

iftest$choice="Y"-o$choice="y"

then

continue

exit

else

iftest$choice="N"-o$choice="n"

then

shmenu

exit

fi

fi

done

3、detele脚本文件代码

#!

/bin/sh-

record_file=passwd

clear

echo"删除用户记录"

whiletrue

do

echo-n"输入用户ID:

"

readuid

iftest-z$uid

then

echo"没有输入!

"

continue

fi

iftest$uid="N"-o$uid="n"

then

#shmenu

exit

fi

iftest$uid-ge500-a$uid-le60000

then

name=`awk-F:

'$3=="'$uid'"'$record_file|cut-f1-d:

`

if(!

test-z$name)

then

awk-F:

'$3=="'$uid'"'$record_file

echo-n"确认删除?

Y或N:

"

readan

if(test$an="Y"-o$an="y")

then

userdel-r$name

echo"记录删除"

echo-n"再删除一个?

Y或N:

"

readan2

if(test$an2="Y"-o$an2="y")

then

continue

elif(test$an="N"-o$an="n")

then

#shmenu

exit

fi

elif(test$an="N"-o$an="n")

then

#shmenu

exit

else

#shmenu

exit

fi

else

echo"没有找到$uid"

fi

else

echo"无效的用户ID"

continue

fi

echo"按回车继续.."

readanswer

shmenu

exit

done

4、passwd文件

root:

x:

0:

0:

root:

/root:

/bin/bash

bin:

x:

1:

1:

bin:

/bin:

/sbin/nologin

linux:

x:

500:

500:

linux:

/home/linux:

/bin/bash

ooo:

123456:

506:

505:

ooos:

/home/ooo:

/bin/bash

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1