Linux课程设计shell编程

  • 格式:doc
  • 大小:602.85 KB
  • 文档页数:9

实用标准文案 文档大全 课 程 设 计 报 告 课程名称 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 mother's 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. xxxxx 2. 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 "${num}p" file就可以轻松实现。 实用标准文案 文档大全 4. 程序清单

4.1 Routine 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.2 Makememo(含选作) #!/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 "${num}d" $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 "${num}p" $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月。

[2] Neil Matthew, Richard Stones. Linux程序设计(第3版). 健等译. :人民邮电, 2007.

[3] Mark G. Sobell. Linux命令、编辑器与Shell编程. 明军等译. :清华大学, 2007.