




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux程序开发环境实验报告项目名称 Linux Shell程序设计 专业班级 软件 学 号 姓 名 实验成绩:批阅教师:批阅日期:2016年 6 月 1 日实验3 Linux Shell程序设计1、实验目的(1) 掌握Linux shell程序运行方法 (2) 掌握Linux Shell程序基本语法(3) 了解Linux环境变量(4) 编写简单Linux shell程序 2、实验内容完成简单CD唱片管理系统。(1) 需求假设你收集了大量的CD唱片,现在为了方便管理,需要设计和实现一个管理CD唱片的程序。程序至少能够把每张CD唱片的资料保存起来,如唱片的名称、音乐类型、艺术家或作曲家的名字等;然后针对某张CD唱片而言,还需要保存一些简单的曲目信息;程序要可以以CD唱片为单位进行搜索,而不是以曲目为单位;为了使程序具备完整性,还需要实现对CD唱片资料的输入、修改和删除等功能。(2) 设计把标题信息和曲目信息分开,用两个文本文件分别来存储。每张CD唱片保存如下信息:编号、标题、曲目类型(流行、爵士等)、作曲家等。曲目只保存下面两个信息:编号和曲名。如下表所示:表1. 唱片信息唱片编号标题曲目类型作曲家CD123Cool saxjazzBixCD234Classic violinclassicBachCD345Hits99popVarious表2. 曲目信息目录编号曲目编号曲名CD1231Some jazzCD1232More jazzCD2341Sonata in D minorCD3451Dizzy各项信息用逗号来分隔。(3) 实现程序共包含如下函数:get_return()get_confirm()set_menu_choice()insert_title()insert_track()add_record_tracks()add_records()find_cd()update_cd()count_cds()remove_records()list_tracks()3. 实验步骤(1)版权信息;#!/bin/bash# Very simple example shell script for managing a CD collection. # Copyright (C) 2010-2013 Central South University.(2)设置实验脚本程序将要用到的全局变量,包括标题文件、曲目文件和一个临时文件,同时设置Ctrl+C组合键的中断处理,确保在用户中断脚本程序时删除临时文件;menu_choice=”“current_cd=”“ title_file=”title.cdb” tracks_file=”tracks.cdb” temp_file=/tmp/cdb.$trap rm -f $temp_file EXIT(3)现在开始定义函数。最开始两个简单的工具型函数;get_return() echo -e “Press return c” read xreturn 0get_confirm() echo -e “Are you sure? c” while truedoread xcase “$x” iny | yes | Y | Yes | YES ) return 0;n | no | N | No | NO) echoecho “Cancelled”return 1;*) echo “Please enter yes or no” ;esac done(4)接下来是主菜单函数,菜单的内容是动态变化的,当用户选择了某张CD唱片后,主菜单中会多出几个选项;set_menu_choice() clearecho “Options :-“ echoecho “ a) Add new CD”echo “ f) Find CD”echo “ c) Count the CDs and tracks in the catalog”if “$cdcatnum” != “” ; thenecho “ l) List tracks on $cdtitle”echo “ r) Remove $cdtitle”echo “ u) Update track information for $cdtitle”fiecho “ q) Quit”echoecho -e “Please enter choice then press return c” read menu_choicereturn(5)然后是两个很小的函数insert_title和insert_track,这两个函数用户向数据库文件中添加数据,在此基础上是一个比较大的函数add_record_tracks,该函数会用到上述两个小函数,使用模式匹配确保用户未输入逗号(因为本实验脚本把逗号用做数据字段之间的分隔符),使用算术操作在用户输入曲目时递增当前曲目的编号;insert_title() echo $* $title_filereturn insert_track() echo $* $tracks_file returnadd_record_tracks() echo “Enter track information for this CD” echo “When no more tracks enter q” cdtrack=1cdttitle=”“while “$cdttitle” != “q” doecho -e “Track $cdtrack, track title? c” read tmpcdttitle=$tmp%,*if “$tmp” != “$cdttitle” ; thenecho “Sorry, no commas allowed”continue fiif -n “$cdttitle” ; thenif “$cdttitle” != “q” ; theninsert_track $cdcatnum,$cdtrack,$cdttitle fielse cdtrack=$(cdtrack-1)fi cdtrack=$(cdtrack+1)done (6)add_records函数用于输入新CD唱片的标题信息;add_records() # Prompt for the initial informationecho -e “Enter catalog name c” read tmpcdcatnum=$tmp%,*echo -e “Enter title c” read tmp cdtitle=$tmp%,*echo -e “Enter type c” read tmp cdtype=$tmp%,*echo -e “Enter artist/composer c” read tmpcdac=$tmp%,*# Check that they want to enter the informationecho About to add new entryecho “$cdcatnum $cdtitle $cdtype $cdac”# If confirmed then append it to the titles fileif get_confirm ; theninsert_title $cdcatnum,$cdtitle,$cdtype,$cdac add_record_trackselse remove_recordsfireturn (7)find_cd函数的作用是使用grep命令在CD唱片标题文件中查找CD唱片的有关资料。程序需要知道查询字符串在标题文件里出现的次数,但grep命令的返回值只能获取该字符串是匹配了0次还是多次。为了解决这一问题,我们把grep命令的输出保存到一个临时文件,文件中的每行对应一个匹配,然后再统计该文件的行数。单词统计命令wc在其输出中使用空格符分隔被统计文件中的行数、单词数和字符个数。我们使用$(wc l $temp_file)标记从wc命令的输出结果中提取出第一个参数,并赋值给变量linesfound。我们把IFS(内部数据字段分隔符)设置为一个逗号,这样是为了读取以逗号分隔的数据字段。另一个可选的命令是cut。find_cd() if “$1” = “n” ; thenasklist=n elseasklist=y ficdcatnum=”“echo -e “Enter a string to search for in the CD titles c” read searchstrif “$searchstr” = “” ; thenreturn 0 figrep “$searchstr” $title_file $temp_fileset $(wc -l $temp_file) linesfound=$lcase “$linesfound” in0) echo “Sorry, nothing found”get_return return 0 ;1) ;2) echo “Sorry, not unique.”echo “Found the following” cat $temp_fileget_returnreturn 0esacIFS=”,”read cdcatnum cdtitle cdtype cdac $temp_file mv $temp_file $tracks_fileechoadd_record_tracks fireturn (9)count_cds函数用于快速统计数据库中CD唱片个数和曲目总数;count_cds() set $(wc -l $title_file)num_titles=$lset $(wc -l $tracks_file)num_tracks=$lecho found $num_titles CDs, with a total of $num_tracks tracks get_returnreturn(10)remove_records函数用于从数据库文件中删除数据项,通过grep v命令删除所有匹配的字符串。注意:必须使用一个临时文件来完成这一工作,如果使用类似下面的命令:grep v “$cdcatnum” $title_file$title_file文件就会在grep命令开始执行之前,被重定向操作设置为空文件,结果导致grep命令将从一个空文件里读取数据。remove_records() if -z “$cdcatnum” ; thenecho You must select a CD firstfind_cd n fiif -n “$cdcatnum” ; thenecho “You are about to delete $cdtitle” get_confirm & grep -v “$cdcatnum,” $title_file $temp_file mv $temp_file $title_filegrep -v “$cdcatnum,” $tracks_file $temp_file mv $temp_file $tracks_filecdcatnum=”“echo Entry removed get_return fireturn(11)list_tracks函数还是使用grep命令来找出想要的行,通过cut命令来访问想要的字段,然后通过more命令提供按页输出。list_tracks() if “$cdcatnum” = “” ; thenecho no CD selected yetreturn elsegrep “$cdcatnum,” $tracks_file $temp_file num_tracks=$(wc -l $temp_file)if “$num_tracks” = “0” ; thenecho no tracks found for $cdtitle else echoecho “$cdtitle :-“echocut -f 2- -d , $temp_file echo | $PAGER:-morefi figet_returnreturn (12)现在所有的函数都已定义好,开始进入主程序部分:开头的几行先确保需要的文件处于一个已知状态,然后调用主菜单函数set_menu_choice,再根据其输出进行相应的操作。如果用户选择了退出,程序就先删除临时文件,再显示结束信息,最后成功退出(退出码为0)。rm -f $temp_fileif ! -f $title_file ; thentouch $title_file fiif ! -f $tracks_file ; then touch $tracks_filefi# Now the application properclearechoechoecho “Mini CD manager” sleep 1quit=nwhile “$quit” != “y” ; doset_menu_choicecase “$menu_choice” ina)add_records;r) remove_records; f) find_cd y;u) update_cd;c) count_cds;l) list_tracks; b)echomore $title_file echo get_return;q | Q ) quit=y;*) echo “Sorry, choice not recognized”; esacdone#Tidy up and leaverm -f $temp_file echo “Finished” exit 04、实验记录(1) 实验过程:vim CD.sh 新建文件按i:在当前光标处插入文本按Esc返回命令模式:wq 保存当前修改并退出到终端命令行输入sh CD.sh运行文件,后报错。找到报错的行数fi需要回车另起一行修改后保存再次运行CD.sh,脚本正确(2) 心得体会进入系统,su进入root用户,使用vim CD.sh命令新建shell文件,命令模式和插入模式切换。自己敲代码,通读代码然后根据错误信息进行调试修改,会
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中考专练:书面表达-(含答案)
- 农业大数据时代2025年农产品无损检测技术与物联网的融合报告
- 两江投资面试题库及答案
- 理财会计面试题及答案
- 兰州护士面试题目及答案
- 农业产业强镇建设资金申请项目产业链优化与整合报告
- 库房会计面试题目及答案
- 康宁会计面试题目及答案
- 电子合同签署流程
- 美术馆展览策划活动规划策略总结计划制定
- 2025至2030有机聚合物钽电容器行业发展趋势分析与未来投资战略咨询研究报告
- 2025年教师节感恩教师主题班会课件
- 建筑培训教学课件
- 2025沈阳各区县(市)工会公开招聘工会社会工作者数量考试参考试题及答案解析
- 2025年中国DDX58抗体行业市场全景分析及前景机遇研判报告
- 学习乐理音程课件
- (2025秋新版)苏教版小学数学二年级上册全册教案
- 爆破安全培训课件
- 管线物探基本知识培训课件
- 《燃煤火力发电企业设备检修导则》
- 日语话剧展演策划
评论
0/150
提交评论