35林振伟linux大作业.docx
- 文档编号:10536872
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:25
- 大小:353.11KB
35林振伟linux大作业.docx
《35林振伟linux大作业.docx》由会员分享,可在线阅读,更多相关《35林振伟linux大作业.docx(25页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 35 林振伟 linux 作业