一 绪论
§1.1设计背景
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它主要用于基于Intel x86系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的。
§1.2设计目的
在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。你们可以通过创建一些UNIX/LINUX shell 脚本文件来满足以上需求。
二 需求分析
§2.1系统概述
§2.1.1 任务概述
Linux作为多用户、多任务的操作系统,其系统资源是所有用户共享的。对用户的管理是操作系统的重点。LINUX课程设计要用shell编程实现,将理论学习付诸实践。设计一个脚本(shell)程序能实现增加、删除、
页脚内容1
程序设计实验样本
查找和显示特定用户信息的功能。
§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、 查询并显示特定用户的记录
页脚内容2
程序设计实验样本
6、 往passwd文件里增加新的用户记录
7、 从passwd文件里删除某个用户记录
你可以使用UNIX/LINUX中一些比较简单的命令或命令组合来执行1、2、3、4、5的任务。对于任务6和7,你需要编写单独的Shell脚本文件(必须分别命名为addusers和deluser)并且在你的主脚本menu文件中调用这些脚本文件。
三 系统设计
§3.1结构层次图
主菜单显示当前所有用户的记录显示当前所有用户经格式化显示用户名和用户ID显示格式化后用户名和用户查找指定用户信息添加用户信息删除用户信息退出
§3.2.运行流程
页脚内容3
程序设计实验样本
(1)总运行流程
主菜单Y是否正确选择N提示错误是否选QN功能实现继续选择Y退出(2)addusers模块运行流程
用户添加是否正确填写信息NY提示错添加用误户信息进入主菜单(3)deluser模块用户运行流程
页脚内容4
程序设计实验样本
用户删除输入用户ID是否存在用户IDN提示错误Y是否删除NY删除成功进入主菜单 系统实现
主菜单:
选择1:打印当前所有用户
页脚内容5
四程序设计实验样本
选择2:打印当前所有用户记录(格式化后)
选择3:打印用户名和用户ID
选择4:打印用户名和用户ID(格式化后)
页脚内容6
程序设计实验样本
选择5:查询特定用户
没有输入关键字和输入关键字没有记录:
查找到记录:
选择6:添加用户
添加成功:
页脚内容7
程序设计实验样本
用户名无效情况:用户名只能是数字或字母,用户名不能为空,
密码无效:密码不能小于6,密码不能为空,密码只能是数字或字母,密码必须和确认密码相同
用户ID无效:用户ID不能为空,用户ID不能小于500,用户ID只能为数字
页脚内容8
程序设计实验样本
组ID无效:组ID不能为空,组ID不能小于500,组ID只能为数字
登录shell无效:shell只能是bash,sh,kash,csh中的一种,shell不能空
选择7:删除用户
查找用户ID存在,是否要删除选Y,删除成功:
页脚内容9
程序设计实验样本
用户ID不存在和没有输入用户ID情况:
用户ID存在,在确认删除选N和其他字符是退出:
选择Q:退出
页脚内容10
程序设计实验样本
不正确选择:
五 代码实现
1)主菜单代码
#! /bin/bash
#删除用户
页脚内容11
程序设计实验样本
clear
echo \" 用户删除 \"
echo \"=========================\"
while true
do
read -p \"输入用户ID:\" userids
if( test ` expr match \"$userids\" \"[0-9]*\" ` -ne ` expr length \"$userids\" `) then
echo \"输入的用户ID只能是数字,请重新输入\"
elif ( test -z \"$userids\" ) then
echo \"用户ID不能为空\"
else
break
页脚内容12
程序设计实验样本
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 $? -eq 0) then
echo \"删除成功\"
else
echo \"删除失败\"
break
页脚内容13
程序设计实验样本
fi
else
break
fi
else
echo \"用户不存在\"
fi
2)用户添加代码
#! /bin/bash
clear
#用户名
echo \" 新用户添加页脚内容14
\"
程序设计实验样本
echo \"==============================\"
while true
do
echo -n \"请输入用户名:\"
read username
a=` expr match \"$username\" \"[0-9a-zA-Z]*\" `
b=` expr length \"$username\" `
if ( test $a -ne $b ) then
echo \"用户名只能是数字或字母,请重新输入用户名:\"
elif ( test -z \"$username\" ) then
echo \"用户名不能为空,请重新输入用户名:\"
else
页脚内容15
程序设计实验样本
break
fi
done
#用户密码
while true
do
read -p \"请输入密码:\" passwd
if ( test ` expr match \"$passwd\" \"[0-9a-zA-Z]*\" ` -ne echo \"用户密码只能为数字或字母,情重新输入密码\"
elif ( test -z \"$passwd\" ) then
echo \"用户密码不能为空,请输入密码\"
elif ( test ` expr length \"$passwd\" ` -lt 6 ) then
页脚内容16
` expr length \"$passwd\" ` ) then
程序设计实验样本
echo \"密码长度不能小于6\"
else
read -p \"请输入确认密码:\" ackpw
if(test \"$passwd\" = \"$ackpw\" ) then
break
else
echo \"两次的密码不匹配\"
fi
fi
done
#用户ID
while true
页脚内容17
程序设计实验样本
do
read -p \"请输入用户ID:\" userid
if ( test ` expr match \"$userid\" \"[0-9]*\" ` -ne ` expr length \"$userid\" ` ) then
echo \"用户ID只能为数字\"
elif ( test -z \"$userid\") then
echo \"用户ID不能为空\"
elif ( test $userid -lt 500 ) then
echo \"用户ID不能小于500,请重新输入\"
else
break
fi
done
页脚内容18
程序设计实验样本
#组ID
while true
do
read -p \"请输入组ID:\" groupid
if ( test ` expr match \"$groupid\" \"[0-9]*\" ` -ne ` expr length \"$groupid\" ` echo \"组ID只能为数字\"
elif ( test -z \"$groupid\" ) then
echo \"组ID不能为空, 请重新输入\"
elif ( test $groupid -lt 500 ) then
echo \"组ID不能小于500,请重新输入\"
else
break
页脚内容19
) then
程序设计实验样本
fi
done
#登录shell
while true
do
read -p \"请输入登录shell(bash,sh kash,csh):\" shellname
if (test \"$shellname\" != \"bash\" -a \"$shellname\" != echo \"你输入的shell名不存在本系统中,请重新输入\"
else
break
fi
done
页脚内容20
-a \"kash\" \"sh\" \"$shellname\" != -a \"$shellname\" != \"csh\" ) then
程序设计实验样本
#添加用户
userinfo=\"$username:$passwd:$userid:$groupid:$username:/home/$username:/bin/$shellnamif ( test $? -ne 1 ) then
echo $userinfo >> passwd
if ( test $? -eq 0 ) then
echo \"用户添加成功\"
else
echo \"用户添加失败\"
fi
fi
3)用户删除代码
#! /bin/bash
页脚内容21
e\"
程序设计实验样本
#删除用户
clear
echo \" 用户删除 \"
echo \"=========================\"
while true
do
read -p \"输入用户ID:\" userids
if( test ` expr match \"$userids\" \"[0-9]*\" ` -ne ` expr length \"$userids\" `) then
echo \"输入的用户ID只能是数字,请重新输入\"
elif ( test -z \"$userids\" ) then
echo \"用户ID不能为空\"
else
页脚内容22
程序设计实验样本
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 $? -eq 0) then
echo \"删除成功\"
else
echo \"删除失败\"
页脚内容23
程序设计实验样本
break
fi
else
break
fi
else
echo \"用户不存在\"
fi
六 心得体会
在本次shell大作业中,学习了很多知识,掌握的很多Linux的相关命令,同时也对Linux有了更深的了解,在shell编程中也找到了一些技巧,加深了对shell编程的能力和认识。这也对自己以后的学习Linux知识更见有帮助。在实现这些功能时,边学习边尝试,查阅相关知识和书本。在此期间虽然有些烦躁,但是能够实现功能也是一件很快乐的事。
页脚内容24
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务