操作系统实验课程作业shell编程有文本文件studenttxt该文件是所有学生的信息每个学生存储一行信息.docx
《操作系统实验课程作业shell编程有文本文件studenttxt该文件是所有学生的信息每个学生存储一行信息.docx》由会员分享,可在线阅读,更多相关《操作系统实验课程作业shell编程有文本文件studenttxt该文件是所有学生的信息每个学生存储一行信息.docx(16页珍藏版)》请在冰豆网上搜索。
操作系统实验课程作业shell编程有文本文件studenttxt该文件是所有学生的信息每个学生存储一行信息
操作系统课程报告
题目:
shell编程实现简单的学生信息管理
学院:
信息工程与自动化学院
专业:
计算机科学与技术
班级:
姓名:
学号:
指导老师:
2011年6月6号
1、shell编程课程设计的目的和要求
目的:
熟悉shell命令的功能和使用方法
掌握shell编程的基本思想
理解shell程序的设计方法
熟悉shell程序的编辑、运行、调试方法与过程
要求:
有文本文件student.txt,该文件是所有学生的信息,每个学生存储一行信息,
信息格式如:
学号:
姓名:
性别:
专业如(101:
张三:
男:
计算机)
设计一个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
echo"a)Addnewstudentinfomation"
echo"eg:
-a学号:
姓名:
性别:
专业"
echo"s)Statstudentinfomation"
echo"eg:
-s学号"
echo"d)Deletespecifiedstudentinfomation"
echo"eg:
-d学号"
echo"l)Listinfomationofallstudentsstored"
echoeg:
-l
echo"q)Quit"
echo
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()
{
echo-e"Areyousure?
\c";
whiletrue
do
readx
case"$x"in
y|yes|Y|Yes|YES)
return0;;
n|no|N|No|NO)
echo;
echo"Cancelled"
return1;;
*)echo"Pleaseenteryesorno";;
esac
done
}
insert_student()
{
echo$*>>$student_file;
return;
}
check_student()
{
student_no=$1;
student_existingFlag=`awk-F':
''{if($1=="'"$student_no"'"){printf("%s","y")}}'$student_file`
}
stat_student()
{
check_student$current_student;
if["$student_existingFlag"="n"];then
echo"学号为$current_student的学生信息不存在"
else
awk-F':
''{if($1=="'"$current_student"'")print$0}'$student_file;
fi
return;
}
add_student()
{
check_student$current_student;
if["$student_existingFlag"="y"];then
echo"学号为$current_student的学生信息已经存在,信息为:
"
stat_student$current_student;
else
insert_student$*
echo"studentinfomation$*added";
fi
return;
}
delete_student()
{
check_student$current_student;
if["$student_existingFlag"="n"];then
echo"学号为$current_student的学生信息不存在"
else
ifget_confirm;then
delete_infomation$current_student;
fi
fi
echo"成功删除学号为$current_student的学生信息"
return;
}
delete_infomation()
{
awk-F':
''{if($1!
="'"$current_student"'"){print$0}}'$student_file>$temp_file;
cp$temp_file$student_file
}
list_students()
{
sed-n'p'$student_file;
return;
}
rm-f$temp_file;
if[!
-f$student_file];then
touch$student_file
fi
clear
echo
echo
sleep1
quit=n;
while["$quit"!
="y"];do
set_menu_choice;
case"$menu_choice"in
"a")add_student$student_infomation
sleep2;;
"d")delete_student$current_student
sleep2;;
"s")stat_student$current_student
sleep2;;
"l")list_students
sleep2;;
"q"|"Q")quit="y";;
*)echo"Sorry,choicenotrecognized"
sleep2;;
esac
done
echo"removingtempfile..."
rm-rf$temp_file
echo"Finished"
exit0
程序运行主界面查看0001的个人信息
添加学生0004:
libaocan:
n:
jk查看全部学生信息
删除0006退出程序
八、实验总结
这个学期我们学习了操作系统这门课程,课程知识的实用性很强,因此实验就显得非常重要,我们做了Linux操作系统安装、Linux下网络命令的使用、Linux下telnet、ftp、ssh网络配置,shell编程四个实验。
刚开始做实验的时候,由于自己的理论知识基础不好,在实验过程遇到了许多的难题,也使我感到理论知识的重要性。
但是我并没有气垒,在实验中发现问题,自己看书,独立思考,最终解决问题,从而也就加深我对课本理论知识的理解,达到了“双赢”的效果。
学习Linux和学习其他操作系统一样,要学会分析,遇到问题不要怕、不要担心,要分析问题的原因,故障出现的原因,以及解决方法。
同一个故障、错误,可能会有不同的解决方法。
要分析问题,获取不同的解决方法,提高自己的能力。
最后,学习Linux学习要有耐心,不要急躁,很多人因为出现错误,一时间解决不了,就放弃了。
错误是在所难免的——没错误就不正常了,没错误只能说明没有在使用。
遇到错误要仔细分原因,要相信问题一定能解决,不惜花时间去研究它。
实验过程中培养了我在实践中研究问题,分析问题和解决问题的能力以及培养了良好的编程素质,提高了自己动手能力,培养理论联系实际的作风,增强创新意识。
九、参考文献
Linux命令、编辑器与shell编程杨明军王风芹清华大学出本社
Shell脚本学习指南罗宾比博机械工业出版社
Linux教程李善平施韦林欣译清华大学出版社