Linux课程设计shell编程-.pdf
课 程 设 计 报 告课程名称Linux 操作系统课程设计指导教师张玲起止日期2014-03-01 至 2014-06-13 实验项目实验三Shell 编程学院信息与通信工程学院专业电子信息工程学生姓名班级/学号成绩指导老师签字1.课程设计概述理解 Shell 程序的执行环境和执行过程,掌握Shell 语言的一般语法规则,能用bash编写,调试简单的 shell 程序。1.1课程设计的目的本实验的目的是使学生理解Shell 程序的执行环境和执行过程,掌握 Shell 语言的一般语法规则,能用 bash编写简单的shell 程序。1.2课程设计的内容编写一个shell 脚本 routine,实现日程提醒功能;编写一个shell 脚本 makememo,实现备忘录管理功能;(选作)修改脚本,改进或增加新的功能。1.3设计原理图 1 Shell 工作流程2.实验步骤2.1操作2.1.1编辑备忘录(vi 编辑)在 exp3 目录下,编辑一个备忘录文件memo,其中的每行为一项日程安排,格式是:mm/dd/yy 日程提示以下是一个memo 文件的例子:06/03/14 mothers birthday 06/08/14 lunch with joe 06/12/14 call zhang 06/14/14 meeting 4pm 06/15/14 shopping with mary 2.1.2编写日程提醒脚本(此部分操作截图见图2)在 exp3 目录下编写一个Shell 脚本 routine,完成以下功能:1.显示初启信息脚本启动时首先输出一些初始信息,包括程序名称与编者、当前的日期与时间、适当的问候语等,格式自定。例如:*routine v1.0 by 2012010948*Good Evening!用户名Today is Tue Mar 12 19:25:30 CST 2014 提醒用户当日的日程安排查询备忘录文件memo,显示今日的日程安排。图 2 日程提醒2.1.3运行脚本(此部分操作截图见图3、4)1.执行脚本。为 routine 脚本设置执行权(chmod 755 routine),运行 routine 脚本(./routine),调试并检查运行结果。提示:变换memo 文件内容,检查日程提示是否正确。图 3 执行脚本2.自动执行脚本。编辑主目录下的.bashrc 文件,将/2012010948/exp3/routine 命令行加到文件末尾(注意将 your-sid 替换为你的学号)。重新启动“终端”,检查脚本是否能成功地自动执行。图 4 自动执行脚本2.1.4编写备忘录管理脚本1.在 exp3 目录下编写一个Shell 脚本 makememo,完成以下功能:显示初启信息及菜单显示程序初启信息(程序名、编者学号等信息),显示程序的菜单,例如:makememo v1.0 by 2012010948*MENU*1.xxxxx2.xxxx 3.xxxxxx 4.接收并处理用户的输入根据用户的输入的菜单编号,执行相应的功能。2.1.5运行脚本(此部分操作截图见图5)2.1.6(选做)修改脚本(此部分操作截图见图5)1.添加查找功能(按日期)2.添加查找功能(按序号)图 5 备忘录管理3.实验结论与评价3.1日程提醒此部分操作较为简单,大部分代码老师都已经给出来了,遇到困难的地方是没有办法准确地显示出当日的日程,在老师的帮助下发现原因是系统的显示时间格式必须和编辑的备忘录时间格式相同。在这个操作中主要掌握了两个技巧,一是如何根据时间显示不同的问候语,主要是会用case语句,二是如何匹配日期,用下面的语句。主要是grep的用法。echo$day grep$day$HOME/2012010948/exp3/memo|echo Nothing.3.2备忘录管理(含选作)脚本的初始代码老师已经给出,难度不大,主要是需要看懂,学会灵活运用sed 命令处理文本文件。选作部分根据日期查找很容易做,但是根据序号查找遇到了困难,用grep 操作的话,会显示所有含有查找序号的日程,但是用sed-n$nump file 就可以轻松实现。4.程序清单4.1Routine echo*routine v1.0 by 2012010948*hour=date+%H case$hour in 08|09|10|11|12)echo Good Morning!Vanilla;13|14|15|16|17)echo Good Afternoon!Vanilla;18|19|20|21|22)echo Good Evening!Vanilla;*)echo Hello!Vanilla;esac echo Today is date echo-n memo:day=date+%D echo$day grep$day$HOME/2012010948/exp3/memo|echo Nothing.4.2Makememo(含选作)#!/bin/bash echo makememo v1.0 by 2012010948#显示版本和作者信息,须替换your-sid MEMOFILE=$HOME/2012010948/exp3/memo#定义备忘录文件名add_memo()#向备忘录中添加一条记录 echo-n 输入要添加的日程项:read item echo$item$MEMOFILE sort-o$MEMOFILE$MEMOFILE echo 日程添加已完成 del_by_date()#按给定日期删除一条备忘录记录 echo-n 输入要删除的日程项(mm/dd/yy):read item sed-i/$item/d$MEMOFILE echo 日程删除已完成 del_by_num()#按给定序号删除一条备忘录记录 set wc-l$MEMOFILE echo-n 输入要删除的日程项编号(1-$1):read num sed-i$numd$MEMOFILE echo 日程删除已完成 search_by_date()#按给定日期chaxun 一条备忘录记录 echo-n 输入要查找的日程项(mm/dd/yy):read item grep$item$HOME/2012010948/exp3/memo|echo Nothing.search_by_num()#按给定序号chaxun 一条备忘录记录 set wc-l$MEMOFILE echo-n 输入要查找的日程项编号(1-$1):read num sed-n$nump$HOME/2012010948/exp3/memo|echo Nothing.print_menu()#显示菜单 echo*MENU*echo 1.显示日程2.添加日程 echo 3.删除日程(按日期)4.删除日程(按序号)echo 5.显示菜单6.退出 echo 7.查找日程(按日期)8.查找日程(按序号)echo*print_menu while true do echo-n 输入操作选择(1-8):read choice case$choice in 1)cat-n$MEMOFILE;2)add_memo;3)del_by_date;4)del_by_num;5)print_menu;7)search_by_date;8)search_by_num;6)echo Bye!;break;*)echo Illegal Option;esac done 参考文献1张玲.Linux 操作系统基础、原理与应用,北京:清华大学出版社,2014年2月。2Neil Matthew,Richard Stones.Linux 程序设计(第 3版).陈健等译.北京:人民邮电出版社,2007.3Mark G.Sobell.Linux 命令、编辑器与Shell编程.杨明军等译.北京:清华大学出版社,2007.