Linux编程用户信息管理.docx
- 文档编号:26783114
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:16
- 大小:376.43KB
Linux编程用户信息管理.docx
《Linux编程用户信息管理.docx》由会员分享,可在线阅读,更多相关《Linux编程用户信息管理.docx(16页珍藏版)》请在冰豆网上搜索。
Linux编程用户信息管理
一绪论
§1.1设计背景
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
它主要用于基于Intelx86系列CPU的计算机上。
这个系统是由全世界各地的成千上万的程序员设计和实现的。
§1.2设计目的
在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:
用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。
请设计一个脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。
你们可以通过创建一些UNIX/LINUXshell脚本文件来满足以上需求。
二需求分析
§2.1系统概述
§2.1.1任务概述
Linux作为多用户、多任务的操作系统,其系统资源是所有用户共享的。
对用户的管理是操作系统的重点。
LINUX课程设计要用shell编程实现,将理论学习付诸实践。
设计一个脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。
§2.1.2需求规定
程序要包括四个文件,即menu,add,delete,passwd四个文件。
passwd文件是用来保存用户信息;menu文件是主菜单,要求运行的时候能显示一个菜单供用户选择;addusers文件是用来增加信息;deluser文件是用来删除信息。
在主Shell脚本文件里(必须以menu命名)要有一个多操作选项的菜单以便用户从中选择。
对于任务6和7,需要编写单独的Shell脚本文件(必须分别命名为addusers和deluser)并且在主脚本menu文件中调用这些脚本文件。
§2.2功能需求
在主Shell脚本文件里(必须以menu命名)要有一个多操作选项的菜单以便用户从中选择。
在不同任务的中,这些操作能自动实现以下功能:
1、在屏幕上显示当前所有用户的记录
2、在屏幕上显示当前所有用户(经过格式化和排序的)的记录
3、只在屏幕上显示用户名和用户ID
4、只在屏幕上显示(经过格式化和排序的)用户名和用户ID
5、查询并显示特定用户的记录
6、往passwd文件里增加新的用户记录
7、从passwd文件里删除某个用户记录
你可以使用UNIX/LINUX中一些比较简单的命令或命令组合来执行1、2、3、4、5的任务。
对于任务6和7,你需要编写单独的Shell脚本文件(必须分别命名为addusers和deluser)并且在你的主脚本menu文件中调用这些脚本文件。
三系统设计
§3.1结构层次图
§3.2.运行流程
(1)总运行流程
(2)addusers模块运行流程
(3)deluser模块用户运行流程
四系统实现
主菜单:
选择1:
打印当前所有用户
选择2:
打印当前所有用户记录(格式化后)
选择3:
打印用户名和用户ID
选择4:
打印用户名和用户ID(格式化后)
选择5:
查询特定用户
没有输入关键字和输入关键字没有记录:
查找到记录:
选择6:
添加用户
添加成功:
用户名无效情况:
用户名只能是数字或字母,用户名不能为空,
密码无效:
密码不能小于6,密码不能为空,密码只能是数字或字母,密码必须和确认密码相同
用户ID无效:
用户ID不能为空,用户ID不能小于500,用户ID只能为数字
组ID无效:
组ID不能为空,组ID不能小于500,组ID只能为数字
登录shell无效:
shell只能是bash,sh,kash,csh中的一种,shell不能空
选择7:
删除用户
查找用户ID存在,是否要删除选Y,删除成功:
用户ID不存在和没有输入用户ID情况:
用户ID存在,在确认删除选N和其他字符是退出:
选择Q:
退出
不正确选择:
五代码实现
1)主菜单代码
#!
/bin/bash
#删除用户
clear
echo"用户删除"
echo"========================="
whiletrue
do
read-p"输入用户ID:
"userids
if(test`exprmatch"$userids""[0-9]*"`-ne`exprlength"$userids"`)then
echo"输入的用户ID只能是数字,请重新输入"
elif(test-z"$userids")then
echo"用户ID不能为空"
else
break
fi
done
getuserid=$(awk-F':
''$3=="'$userids'"{print$3}'passwd)
if(test$getuserid)then
read-p"是否要删除(Y/N):
"ack
if(test"$ack"="Y")then
sed-i'/'"$userids"'/d'passwd
if(test$?
-eq0)then
echo"删除成功"
else
echo"删除失败"
break
fi
else
break
fi
else
echo"用户不存在"
fi
2)用户添加代码
#!
/bin/bash
clear
#用户名
echo"新用户添加"
echo"=============================="
whiletrue
do
echo-n"请输入用户名:
"
readusername
a=`exprmatch"$username""[0-9a-zA-Z]*"`
b=`exprlength"$username"`
if(test$a-ne$b)then
echo"用户名只能是数字或字母,请重新输入用户名:
"
elif(test-z"$username")then
echo"用户名不能为空,请重新输入用户名:
"
else
break
fi
done
#用户密码
whiletrue
do
read-p"请输入密码:
"passwd
if(test`exprmatch"$passwd""[0-9a-zA-Z]*"`-ne`exprlength"$passwd"`)then
echo"用户密码只能为数字或字母,情重新输入密码"
elif(test-z"$passwd")then
echo"用户密码不能为空,请输入密码"
elif(test`exprlength"$passwd"`-lt6)then
echo"密码长度不能小于6"
else
read-p"请输入确认密码:
"ackpw
if(test"$passwd"="$ackpw")then
break
else
echo"两次的密码不匹配"
fi
fi
done
#用户ID
whiletrue
do
read-p"请输入用户ID:
"userid
if(test`exprmatch"$userid""[0-9]*"`-ne`exprlength"$userid"`)then
echo"用户ID只能为数字"
elif(test-z"$userid")then
echo"用户ID不能为空"
elif(test$userid-lt500)then
echo"用户ID不能小于500,请重新输入"
else
break
fi
done
#组ID
whiletrue
do
read-p"请输入组ID:
"groupid
if(test`exprmatch"$groupid""[0-9]*"`-ne`exprlength"$groupid"`)then
echo"组ID只能为数字"
elif(test-z"$groupid")then
echo"组ID不能为空,请重新输入"
elif(test$groupid-lt500)then
echo"组ID不能小于500,请重新输入"
else
break
fi
done
#登录shell
whiletrue
do
read-p"请输入登录shell(bash,shkash,csh):
"shellname
if(test"$shellname"!
="bash"-a"$shellname"!
="sh"-a"$shellname"!
="kash"-a"$shellname"!
="csh")then
echo"你输入的shell名不存在本系统中,请重新输入"
else
break
fi
done
#添加用户
userinfo="$username:
$passwd:
$userid:
$groupid:
$username:
/home/$username:
/bin/$shellname"
if(test$?
-ne1)then
echo$userinfo>>passwd
if(test$?
-eq0)then
echo"用户添加成功"
else
echo"用户添加失败"
fi
fi
3)用户删除代码
#!
/bin/bash
#删除用户
clear
echo"用户删除"
echo"========================="
whiletrue
do
read-p"输入用户ID:
"userids
if(test`exprmatch"$userids""[0-9]*"`-ne`exprlength"$userids"`)then
echo"输入的用户ID只能是数字,请重新输入"
elif(test-z"$userids")then
echo"用户ID不能为空"
else
break
fi
done
getuserid=$(awk-F':
''$3=="'$userids'"{print$3}'passwd)
if(test$getuserid)then
read-p"是否要删除(Y/N):
"ack
if(test"$ack"="Y")then
sed-i'/'"$userids"'/d'passwd
if(test$?
-eq0)then
echo"删除成功"
else
echo"删除失败"
break
fi
else
break
fi
else
echo"用户不存在"
fi
六心得体会
在本次shell大作业中,学习了很多知识,掌握的很多Linux的相关命令,同时也对Linux有了更深的了解,在shell编程中也找到了一些技巧,加深了对shell编程的能力和认识。
这也对自己以后的学习Linux知识更见有帮助。
在实现这些功能时,边学习边尝试,查阅相关知识和书本。
在此期间虽然有些烦躁,但是能够实现功能也是一件很快乐的事。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 编程 用户信息 管理