操作系统实验课程作业shell编程有文本文件studenttxt该文件是所有学生的信息每个学生存储一行信息Word文件下载.docx
- 文档编号:4428227
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:16
- 大小:605.53KB
操作系统实验课程作业shell编程有文本文件studenttxt该文件是所有学生的信息每个学生存储一行信息Word文件下载.docx
《操作系统实验课程作业shell编程有文本文件studenttxt该文件是所有学生的信息每个学生存储一行信息Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验课程作业shell编程有文本文件studenttxt该文件是所有学生的信息每个学生存储一行信息Word文件下载.docx(16页珍藏版)》请在冰点文库上搜索。
设计一个shell,名称为student.sh,该shell完成如下功能:
1)当输入student.sh-a101:
计算机时,首先判断101记录是否
存在,如果不存在,则把该信息写入文件,如果存在,则给出提示,并输出文
件中学号为101的该行信息
2)当输入student.sh-d101时,首先判断101记录是否存在,如果不存
在,给出提示,如果存在,则提示用户确认是否要删除记录,如用户输入y或
者yes,则删除文件中学号为101的该行信息,如果用户输入n或no时,则不
做删除操作
3)当输入student.sh-s101时,首先判断101记录是否存在,如果不存
在,给出提示,如果存在,则输出文件中学号为101的该行信息
4)当输入student.sh时,输出文件的全部内容
5)当用户输入的选项不正确时,给出错误提示,并输入该shell的用法,如
(student.sh-q123456)
二、实验所用仪器、材料
微型计算机一台
Linux操作系统
三、shell编程简介
shell是一种命令解释程序(命令解释器),shell解释用户输入的命令行,提交系统内核处理,并将结果返回给用户。
与Linux命令一样都是实用程序,但两者又有区别。
一旦用户注册到系统后,shell就被系统装入内存,并一直运行到用户退出系统之止;
而一般命令仅当被调用时,才由系统装入内存执行。
shell本身也是一种可编程的程序设计语言。
用shell写的程序(shell脚本)相当于dos/windows下的批处理文件,它可以简单到只有一条命令,也可以复杂到包括大量循环、条件语句、数学运算、控制结构,也可以是介于两者之间的程序。
Shell的启动和建立
四、sheel程序结构设计
Shell脚本本身就是程序,是用shell命令构成的,小规模、结构化、模块化、程序设计。
命令:
echo输出信息
Read输入信息read+变量名
Sleep休眠sleep+秒数
在终端上算数表达式的写法:
echo$((1*2*3))这是整数算数不能带小数点
/:
除法%:
余
Sheel脚本格式:
第一行格式#!
/bin/sh
有三种结构顺序结构分支结构循环结构
顺序结构
Wait命令保证进程同步等待一个子进程结束多个并发就用多个wait
分支结构
If判断:
then
T块
Else
F块
fi
判断test语句test表达式=[表达式]
表达式进行文件判断-f文件名(检测该文件是否存在且为普通文件)
-d目录名
-r可读
-w可写
-x可执行
五、程序设
程序为bash程序,进行修改的txt文件为student.txt,在Shell程序运行的目录下建立一个temp目录,用来保存运行过程中的临时文件。
包含有8个函数,每个函数实现相应的功能:
set_menu_choice()
显示一个界面菜单,提示所能进行的操作以及选项的使用格式。
同时获得输入的内容,存放在choice。
get_confirm()
判断输入是否为y|yes|Y|Yes|YES,是则返回0,表示删除;
如果n|no|N|No|NO,则表示取消删除操作。
insert_student():
将所有输入的信息通过重定向写入student.txt。
check_student():
使用awk命令以“:
”为分隔符将输入的学号与txt文件的学号进行匹配;
如果该学号存在,则设存在标记student_existingFlag=y;
否则
student_existingFlag=n。
stat_student()
调用check_student(),根据存在标记student_existingFlag,如果为n,则输出
学生信息不存在;
如果为y,则通过awk命令输出学号所对应的列。
add_student()
调用check_student(),判断student_existingFlag是否为y,如果为y则显示
该学生信息已存在;
否则调用insert_student()将学生信息插入student.txt。
delete_student()
调用check_student(),判断student_existingFlag是否为n,如果为n,则显示
该学生信息不存在;
否则调用confirm_delete确定是否删除,如果确定则调用delete_student()删除学生信息。
delete_infomation()
删除操作,使用awk命令将student.txt文件中学号不等于输入的学号的所有
列重定向输出到临时文件temp_file中,再将temp_file中的内容通过cp命令复制到student.txt文件中,覆盖原来的内容,即完成删除操作。
最后主程序,首先连接student.txt文件,并清屏。
设置一个while循环,当退出标记exit不为y时,进行循环获取输入的选项;
调用set_menu_choice()设置界面,通过case命令判断输入choice_input,当为a时,调用add_student(),添加学生信息;
当为d时,调用delete_infomation(),删除学生信息;
当为s时,调用stat_student(),显示当前学号对应的学生信息;
如果输入的是其他内容,则给出提示信息,重新输入。
六、shell程序调试
Shell程序的调试主要是利用bash命令解释程序的选择项。
调用bash的形式是:
bash-选择项Shell程序文件名几个常用的选择项是:
-e如果一个命令失败就立即退出。
-n读入命令但是不执行它们。
-u置换时把未设置的变量看做出错。
-v当读入Shell输入行时把它们显示出来。
-x执行命令时把命令和它们的参数显示出来。
七、程序源代码及运行结果截图
#!
/bin/bash
###简单的学生信息管理程序
###fileName:
student.sh
###学生的信息存放在student.txt中
###需要在当前运行目录建立temp目录存放临时文件
###Usage:
./student.sh
###交互式执行:
-a学号:
专业添加学生信息
-s学号显示对应学生信息
-d学号删除对应学生信息
-q(-Q)退出管理程序
###Author:
Libaocan
menu_choice="
"
;
student_infomation="
student_existingFlag="
n"
current_student="
student_file="
student.txt"
temp_file=./temp/student.$$;
trap'
rm-f$temp_file'
EXIT;
set_menu_choice()
{
clear;
echo"
Options:
-"
echo
a)Addnewstudentinfomation"
eg:
-a学号:
专业"
s)Statstudentinfomation"
-s学号"
d)Deletespecifiedstudentinfomation"
-d学号"
l)Listinfomationofallstudentsstored"
echoeg:
-l
q)Quit"
echo-e"
Pleaseenterchoicethenpressreturn\n\c"
readchoice;
menu_choice=`echo$choice|awk'
{print$1}'
|sed'
s/\-//g'
`
student_infomation=`echo$choice|awk'
{print$2}'
current_student=`echo$student_infomation|awk-F'
:
'
'
{printf("
%s"
$1)}'
`;
return;
}
get_confirm()
Areyousure?
\c"
whiletrue
do
readx
case"
$x"
in
y|yes|Y|Yes|YES)
return0;
n|no|N|No|NO)
echo;
Cancelled"
return1;
*)echo"
Pleaseenteryesorno"
;
esac
done
insert_student()
echo$*>
>
$student_file;
check_student()
student_no=$1;
student_existingFlag=`awk-F'
{if($1=="
$student_no"
){printf("
"
y"
)}}'
$student_file`
stat_student()
check_student$current_student;
if["
$student_existingFlag"
="
];
学号为$current_student的学生信息不存在"
else
awk-F'
$current_student"
)print$0}'
add_student()
学号为$current_student的学生信息已经存在,信息为:
stat_student$current_student;
insert_student$*
studentinfomation$*added"
delete_student()
ifget_confirm;
delete_infomation$current_student;
成功删除学号为$current_student的学生信息"
delete_infomation()
{if($1!
="
){print$0}}'
$student_file>
$temp_file;
cp$temp_file$student_file
list_students()
sed-n'
p'
rm-f$temp_file;
if[!
-f$student_file];
touch$student_file
clear
sleep1
quit=n;
while["
$quit"
!
do
set_menu_choice;
$menu_choice"
"
a"
)add_student$student_infomation
sleep2;
d"
)delete_student$current_student
s"
)stat_student$current_student
l"
)list_students
q"
|"
Q"
)quit="
Sorry,choicenotrecognized"
removingtempfile..."
rm-rf$temp_file
Finished"
exit0
程序运行主界面查看0001的个人信息
添加学生0004:
libaocan:
n:
jk查看全部学生信息
删除0006退出程序
八、实验总结
这个学期我们学习了操作系统这门课程,课程知识的实用性很强,因此实验就显得非常重要,我们做了Linux操作系统安装、Linux下网络命令的使用、Linux下telnet、ftp、ssh网络配置,shell编程四个实验。
刚开始做实验的时候,由于自己的理论知识基础不好,在实验过程遇到了许多的难题,也使我感到理论知识的重要性。
但是我并没有气垒,在实验中发现问题,自己看书,独立思考,最终解决问题,从而也就加深我对课本理论知识的理解,达到了“双赢”的效果。
学习Linux和学习其他操作系统一样,要学会分析,遇到问题不要怕、不要担心,要分析问题的原因,故障出现的原因,以及解决方法。
同一个故障、错误,可能会有不同的解决方法。
要分析问题,获取不同的解决方法,提高自己的能力。
最后,学习Linux学习要有耐心,不要急躁,很多人因为出现错误,一时间解决不了,就放弃了。
错误是在所难免的——没错误就不正常了,没错误只能说明没有在使用。
遇到错误要仔细分原因,要相信问题一定能解决,不惜花时间去研究它。
实验过程中培养了我在实践中研究问题,分析问题和解决问题的能力以及培养了良好的编程素质,提高了自己动手能力,培养理论联系实际的作风,增强创新意识。
九、参考文献
Linux命令、编辑器与shell编程杨明军王风芹清华大学出本社
Shell脚本学习指南罗宾比博机械工业出版社
Linux教程李善平施韦林欣译清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 课程 作业 shell 编程 文本文件 studenttxt 该文 所有 学生 信息 每个 存储 一行
链接地址:https://www.bingdoc.com/p-4428227.html