linuxb编程实验二.docx
- 文档编号:702050
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:24
- 大小:91.68KB
linuxb编程实验二.docx
《linuxb编程实验二.docx》由会员分享,可在线阅读,更多相关《linuxb编程实验二.docx(24页珍藏版)》请在冰点文库上搜索。
linuxb编程实验二
试验编号:
_01_四川师大实验报告2010年9月18日
计算机科学学院2008级3班
姓名:
余乐坤学号:
**********指导老师:
实验成绩:
实验二Shell编程试验
1.目的要求
(1)熟悉Shell环境和常用功能;
(2)掌握Shell基本语法结构,并能编写简单的Shell程序。
(3)独立完成Shell课程设计——CDManager
2.实验内容
(1)命令补齐功能
●用date命令查看系统当前时间,在输入da后,按tab键,让shell自动补齐命令的后半部分。
●用mkdir命令创建新的目录。
首先输入第一个字母m,然后按tab键,由于以m开头的命令太多,shell会提示是否显示全部的可能命令,输入n。
●再多输入一个字母k,按tab键,让shell列出以mk开头的所有命令的列表。
●在列表中查找mkdir命令,看看还需要多输入几个字母才能确定mkdir这个命令,然后输入需要的字母,再按tab键,让shell补齐剩下的命令。
●最后输入要创建的目录名,按回车键执行命令。
●多试几个命令利用tab键补齐。
(2)命令别名功能
●输入alias命令,显示目前已经设置好的命令的别名。
●设置别名ls为ls–l,以长格形式显示文件列表:
#aliasls=‘ls-l’。
●显示别名ls代表的命令,确认设置生效:
#aliasls。
●使用别名ls显示当前目录中的文件列表。
●在使定义的别名不失效的情况下,使用系统的ls命令显示当前目录中的命令列表:
#\ls。
●删除别名ls:
unaliasls。
●显示别名ls,确认删除别名已经生效:
aliasls。
●最后再用命令ls显示当前目录中的文件列表。
●写出定义别名cd为cd/etc的命令aliascd='cd/etc'。
(3)输出重定向
●用ls命令显示当前目录中的文件列表:
#ls–l。
●使用输出重定向,把ls命令在终端上显示的当前目录中的文件列表重定向到文件list中:
ls–l>list。
●查看文件list中的内容,注意在列表中会多出一个文件list,其长度为0。
这说明shell是首先创建了一个空文件,然后再运行ls命令:
catlist。
●再次使用输出重定向,把ls命令在终端上显示的当前目录中的文件列表重定向到文件list中。
这次使用管道符号>>进行重定向:
ls–l>>list。
●查看文件list的内容,可以看到用>>进行重定向是把新的输出内容附加在文件的末尾,注意其中两行list文件的信息中文件大小的区别:
catlist。
●重复命令ls–l>list。
●再次查看文件list中的内容,和前两次的结果相比较,注意list文件大小和创建时间的区别,完成课后第一题。
(4)输入重定向
●使用输入重定向,把上面生成的文件list用mail命令发送给自己:
mailroot ●查看新邮件,看看收到的新邮件中其内容是否为list文件中的内容。 (5)管道 ●利用管道和grep命令,在上面建立的文件list中查找字符串list: catlist|greplist。 ●利用管道和wc命令,计算文件list中的行数、单词数和字符数: #catlist|wc。 ●查看和修改Shell变量 ●用echo命令查看环境变量PATH的值: #echo$PATH。 ●设置环境变量PATH的值,把当前目录加入到命令搜索路径中去: #PATH=“$PATH: .”。 ●用echo命令查看环境变量PATH的值: #echo$PATH。 ●比较前后两次的变化。 (6)简单的shell程序 ●习题1: 使用Vi将程序menu.sh程序补充完善。 #! /bin/bash echo"PleasechooseeitherN,E,DorQ: " cat<<-ENDIT #[N]ewafile #[E]ditafile #[D]eleteafile #[Q]uit ENDIT readchoice case"$choice"in N)echo"pleaseinputanewfilename: " readvalue touch$value ;; E)echo"pleasinputafilename: " readvalue vi$value ;; D)echo"Pleaseinputafilename: " readvalue rm$value ;; Q)TERM=quit echo"QuitSuccessfully" ;; Esac 思考: 执行程序,写出程序的执行结果。 ______________________________________________________________________通过选项可以新建,删除,编辑文件和退出。 ______________________________________________________________________________________________________________________________________ ●习题2: 变量替换(在横线上为语句添加相应的解释) #! /bin/bash#打开bashshell解析器 #ThisisthefirstBashshellprogramoftheday. #Scriptname: greetings #Writtenby: BarbaraBashful echo"Hello$LOGNAME,it'snicetalkingtoyou."#打印出包括登录名的欢迎字符串 echo"Yourpresentworkingdirectoryis`pwd`."#提示当前路径 echo"Youareworkingonamachinecalled`uname-n`."#显示当前机器的节点名字 ls#Listfilesinthepresentworkingdirectory#显示当前路径包含的文件 echo"Byefornow$LOGNAME.Thetimeis`date+%T`! "#显示当前时间和用户名 思考: 执行程序,写出程序的执行结果。 _________________________________________________________________________________________________________________________________________________________________________ ●习题3: 位置变量的设定及使用(在横线上为语句添加相应的解释) #! /bin/bash #Scriptname: args #Scripttotestcommand-linearguments echoThenameofthisscriptis$0.#显示当前程序的名称 echoTheargumentsare$*.#显示传递给程序的所有参数 echoThefirstargumentis$1.#显示第一个参数 echoThesecondargumentis$2.#显示第二个参数 echoThenumberofargumentsis$#.#显示参数个数 oldargs=$*#将参数一字符串的形式赋值给变量oldargs setJakeNickyScott#将JakeNickyScott设置为参数变量 echoAllthepositionalparametersare$*.#打印出当前新的所有变量 echoThenumberofpositionalparametersis$#.#显示新变量的个数 echo"Good–byefornow,$1."#向Jake说拜拜 set$(date)#将当前时间设置为参数变量 echoThedateis$2$3,$6.#打印出月,日,时的信息 echo"Thevalueof\$oldargsis$oldargs."#打印出oldargs的值 set$oldargs#将oldargs的值重新设置为参数变量 echo$1$2$3#显示新的前三个参数变量 思考: 执行程序,写出程序的执行结果。 __ ______________________________________________________________________________________________ ●习题4: 深入理解let命令的用法。 比如我们可以用+=、(())等方式来实现运算符,并在横线上写明运算结果 (1)$i=5 $leti=5i=5 (2)$leti=i+1 $echo$i6 (3)$let"i=i+2" $echo$i8 (4)$let"i+=1" $echo$i16 (5)$i=3 $((i+=4)) $echo$i7 $((i=i-2)) $echo$i5 ●习题5: 命令替换,通过位置变量的方式来实现一个平方的操作—do_square.sh,请在横线上解释相应运行结果 #! /bin/bash #Scriptname: do_square functionsquare{ localsq#sqislocaltothefunction let"sq=$1*$1" echo"Numbertobesquaredis$1." echo"Theresultis$sq" }函数功能: 计算参数的平方 echo"Givemeanumbertosquare." readnumber value_returned=$(square$number)。 echo"$value_returned"输出结果: number的平方 ●习题5: 阅读下列脚本expr.sh,写出其完成的功能是: 计算1加到100的值 #! /bin/sh NO=100 START=1 SUM=0 echo-n"Calculate"$START"to"$NO"..."//-ndonotoutputthetrailingnewline// while[$NO-gt0] do SUM=`expr$START+$SUM` START=`expr$START+1` NO=`expr$NO-1` done echo"OK,Theansweris$SUM" exit0 ●习题7: 阅读下列脚本read.sh,写出其运行结果 __ __________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ #! /bin/bash #Scriptname: nosy echo-e"Areyouhappy? \c" readanswer echo"$answeristherightresponse." echo-e"Whatisyourfullname? \c" readfirstmiddlelast echo"Hello$first" echo–n"Wheredoyouwork? " read echoIguess$REPLYkeepsyoubusy! ------------------------------------------------------- read-p"Enteryourjobtitle: " echo"Ithoughtyoumightbean$REPLY." echo-n"Whoareyourbestfriends? " read-afriends echo"Sayhito${friends[2]}." (7)Shell综合应用——CDManager ●功能描述: 设计并编写一个管理CD唱盘的程序。 1)“CD唱盘管理程序”能够把各张CD唱盘的基本资料保存起来,比如唱盘名称、音乐类型、歌曲家或作曲家的名字等。 同时,还需要保存每张唱盘中所包含的曲目资料。 2)“CD唱盘管理程序”能够对所有唱盘信息进行检索(下属的曲目细节暂不作考虑),并且还能对唱盘资料进行输入、修改和删除操作。 ●数据描述 1)唱片文件: title.cdb CDNum Title Type Artist CD123 CoolSax Jazz Bix CD234 Classicviolin Classical Bach CD345 Hir99 Pop Various 2)曲目文件: tracks.cdb CDNum TrackNum TrackTitle CD123 1 Somejazz CD123 2 Morejazz CD345 1 Dizzy CD234 1 SonatainDminor 3)函数介绍 ✧get_return()#等待输入,相当于Pressanykeytocontinue ✧get_confirm()#确认输入 ✧set_menu_choice()#主菜单 ✧insert_title()#插入CD唱盘“标题”信息 ✧insert_track()#插入CD唱盘“曲目”信息 ✧add_record_tracks()#增加“曲目”信息 ✧add_records()#增加“标题”和“曲目”信息 ✧find_cd()#查找CD唱盘信息 ✧update_cd()#更新CD唱盘信息 ✧count_cds()#快速统计CD唱盘和曲目数量 ✧remove_records()#删除CD唱盘信息 ✧list_tracks()#列出CD唱盘信息 4)代码完善: 请将CDManager程序补充完整,并调试运行。 5)CDManager程序清单 #! /bin/sh #VerysimpleexampleshellscriptformanagingaCDcollection. menu_choice=""#当前选择的输入 current_cd=""#当前cd title_file="title.cdb"#存放cd信息 tracks_file="tracks.cdb"#存放track信息 temp_file=/tmp/cdb.$$ trap'rm-f$temp_file'EXIT #Nowwedefineourfunctions,sothatthescript,executingfromthetopline,canfind #allthefunctiondefinitionsbeforeweattempttocallanyofthemforthefirsttime. #Toavoidrewritingthesamecodeinseveralplaces,thefirsttwofunctionsaresimple #utilities. get_return(){ echo-e"Pressreturn\c" readx return0 } 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 } #Here,wecometothemainmenufunction,set_menu_choice. #Thecontentsofthemenuvarydynamically,withextraoptionsbeingaddedifaCDentry #hasbeenselected.Notethatecho-emaynotbeportabletosomeshells. set_menu_choice(){ clear echo"Options: -" echo echo"a)AddnewCD" echo"f)FindCD" echo"c)CounttheCDsandtracksinthecatalog" if["$cdcatnum"! =""];then echo"l)Listtrackson$cdtitle" echo"r)Remove$cdtitle" echo"u)Updatetrackinformationfor$cdtitle" fi echo"q)Quit" echo echo-e"Pleaseenterchoicethenpressreturn\c" readmenu_choice return } #Twomoreveryshortfunctions,insert_titleandinsert_trackforaddingtothedatabasefiles. #Thoughsomepeoplehateone-linerslikethese,theyhelpmakeotherfunctionsclearer #Theyarefollowedbythelargeradd_record_trackfunctionthatusesthem. #Thisfunctionusespatternmatchingtoensurenocommasareentered(sincewe'reusingcommas #asafieldseparator),andalsoarithmeticoperationstoincrementthecurrenttracknumber #astracksareentered. insert_title(){ echo$*>>$title_file#利用输入重定向、系统参数在title.cdb中插入记录 return } insert_track(){ echo$*>>$tracks_file#利用输入重定向、系统参数在tracks.cdb中插入$cdcatnum,$cdtrack,$cdttitle组成的记录 return } #Theadd_record_tracksfunctionallowsentryofthemainCDinformationforanewtracks. add_record_tracks() { echo“EntertrackinformationforthisCD” echo“ifthisnomoretracks,pleaseenterq” cdtrack=1 cdtitle=”” while[“$cdttitle”! =“q”] do echo–e“Track$cdtrack,tracktitle? \c” readtmp cdttitle=${tmp%%,*} if[“$tmp”! =”$cdttitle”];then echo”Sorry,nocommasallowed” continue fi if[-n“$cdttitle”];then if[“$cdttitle”! =“q”];then insert_track$cdcatnum,$cdtrack,$cdttitle fi else cdtrack=$((cdtrack-1)) fi cdtarck=$((cdtrack+1)) done return1 } #Theadd_recordsfunctionallowsentryofthemainCDinformationforanewCD. add_records(){ echo–e“Entercatalogname\c” readtmp cdcatnum=${tmp%%,*} echo–e“Entertitle\c” readtmp cdtitle=${tmp%%,*} echo–e“Entertype\c” readtmp cdtype=${tmp%%,*} echo–e“Enterartist/composer\c” readtmp cdac=${tmp%%,*} echoAbouttoaddnewentry echo“$cdcatnum$cdtitle$cdtype$cdac” ifget_confirm;then insert_title$cdcatnum,$cdtitle,$cdtype,$cdac add_r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linuxb 编程 实验