《控制脚本流程》PPT课件

上传人:wuli****0220 文档编号:244662052 上传时间:2024-10-05 格式:PPT 页数:35 大小:298.49KB
返回 下载 相关 举报
《控制脚本流程》PPT课件_第1页
第1页 / 共35页
《控制脚本流程》PPT课件_第2页
第2页 / 共35页
《控制脚本流程》PPT课件_第3页
第3页 / 共35页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第20讲 控制脚本流程 第,*,页 共35页,控制脚本流程,引 言,如何,测试表达式,的逻辑值?,如何设计分支结构?,如何设计循环结构?,【问题的提出】,Geecy软件开发公司的开发人员Tom所开发的通讯录管理脚本phone.sh的改进版本如下:,tomgeecy:$cat phone.sh,#!/bin/bash,read Count file.txt,Count=$(Count+1),echo$Count count_file.txt,./phone.sh,【问题的提出】(续),该版本比旧版本已经有了很大的改进,能够满足一般的使用。但是根据Tom的开发经验,该版本至少存在四大缺陷:,(1)脚本运行的稳定性不高,因为该脚本严重依赖于辅助文件count_file.txt,一旦该文件被以外破坏,该脚本将不能正常工作;,(2)运行性能不高,因为该脚本在运行过程中需要频繁读写三个文件,而从该脚本的功能来看,运行过程中需要频繁读写的文件应该只有数据文件“file.txt”;,(3)功能单一,因为目前只有增加功能,还缺乏基本的搜索功能;,(4)用户界面不够友好,应该使用菜单式的用户界面。,因此Tom需要继续改进该脚本。,【问题分析】,如果要提高稳定性,就要想办法避免使用辅助文件count_file.txt。,最大值就在数据文件file.txt的最后一行的第一个数据域。只需要想办法在增加一行新数据之前把该值读出来,然后增加一,就可以构造出下一个编号。,命令tail,能够从一个文本文件的最后一行起,连续抽取若干行数据显示到屏幕。,【问题分析】(续),如果上述的稳定性问题解决了,那么只需要避免使用脚本的递归调用就可以实现整个运行过程只需要频繁读写一个文件,即数据文件file.txt。,只要找到能够重复运行某一部分脚本的替代方法,那么脚本的递归调用这种方法就可以“退役”了。,【问题分析】(续),对于搜索功能的实现,可以使用grep命令来完成。,【问题分析】(续),菜单式的用户界面的实现原理,就是首先打印若干个菜单项的内容到屏幕上,等待用户选择其中一个功能,脚本程序根据用户的键盘输入来判断用户的选择,从而进行相应功能的操作。然后重复。,测试表达式,test命令能够对表达式进行测试并求出True或False的逻辑值。例如:,test$Name=Linus,test命令的语法要求被测试的表达式中的比较运算符(例如这里的“=”)的左右两边必须有空格。,测试表达式(续),test命令可以一次测试多个表达式。这些表达式之间需要使用选项“-a”或“-o”连接。例如:,test$Name=Linus-a$Country=China,为了有更好的可读性,用户可以使用方括号“”来代替test命令。例如:,$Name=Linus ,设计分支结构,分支结构提供给用户一种流程控制的能力,能够让用户根据某些条件作出判断,然后有所选择地执行某些语句。,使用if语句和case语句都可以实现分支结构。,设计分支结构(续),if语句的基本格式为:,if ,then,else,fi,设计分支结构(续),#!/bin/bash,echo -n Do you know the answer?(y/n),read Result,if$Result =y ,then,echo Good!,echo Congratulations!,else,echo Bad!,echo Work hard!,fi,echo Finished!,设计分支结构(续),case语句的基本格式为:,case in,Pattern1),;,Pattern2),;,.,*),;,esac,设计分支结构(续),#!/bin/bash,echo -n Enter a word (dozen or score):,read Str,case$Str in,dozen),echo 12,;,score),echo 20,;,*),echo It is neither a dozen nor a score.,;,esac,测试字符串,对字符串的测试,除了测试是否相等,还有其他的一些常用的测试。,选 项,作 用,string,如果string的长度不为零,则值为True,否则为False,-z string,如果string的长度为零,则值为True,否则为False,String1=String2,如果string1与string2相等,则值为True,否则为False,String1!=String2,如果string1与string2不相等,则值为True,否则为False,测试算术式,Shell的变量是字符串类型,如果要把变量的内容作为数值进行比较,则需要使用算术测试选项。,选 项,作 用,-eq,等于(Equal),-ne,不等于(Not Equal),-gt,大于(Greater Then),-ge,大于(Greater Then)或等于(Equal),-lt,小于(Less Then),-le,小于(Less Then)或等于(Equal),测试文件,选 项,作,用,-e File,如果文件File存在(Exist),则为True,-s File,如果文件File存在且文件大小(Size)大于零,则为True,-f File,如果文件File存在且是普通文件(File),则为True,-d File,如果文件File存在且是目录(Directory),则为True,-b File,如果文件File存在且是块(Block)特殊文件,则为True,-c File,如果文件File存在且是字符(Character)特殊文件,则为True,-L File,如果文件File存在且是符号链接(Link)文件,则为True,测试文件(续),选,项,作,用,-r File,如果文件File存在且是可读的(Readable),则为True,-w File,如果文件File存在且是可写的(Writable),则为True,-x File,如果文件File存在且是可执行的(Executable),则为True,-O File,如果文件File存在且属于当前用户(Owner),则为True,-G File,如果文件File存在且属于当前用户组(Group),则为True,File1 nt File2,如果文件File1新于(Newer Then)File2,则为True,File1 ot File2,如果文件File1旧于(Older Then)File2,则为True,设计循环结构,循环结构提供了重复执行一段脚本的能力。,脚本程序可以使用两种风格的循环语句来实现循环结构:while循环和for循环。,设计循环结构(续),使用while语句的格式是:,while ,do,done,设计循环结构(续),#!/bin/bash,Count=1,while$Count -le 10 ,do,echo$Count,Count=$(Count+1),done,设计循环结构(续),for语句实现循环结构的一种格式是:,for(Expression1;Expression2;Expression3),do,done,设计循环结构(续),#!/bin/bash,for(Count=1;Count file.txt,Count=$(Count+1),;,【解决方案】(续),2),clear,echo-n Input a keyword:,read Word,clear,grep$Word$File,echo Press enter to continue.,read Enter,;,esac,Done,练 习,1、编写一个Shell脚本,从键盘读入5个整数。然后显示最大数、最小数以及平均值。,2、编写一个Shell脚本,显示Fibonacci数列的前20项。例如:,0,1,1,2,3,5,8,13,21.,练 习(续),3、编写一个Shell脚本,从键盘上接收两个文件名,如果两个文件都存在则交换两个文件的内容,否则应给出出错信息。,4、编写一个shell脚本,产生并输出如下的序列:,1,2,3,2,3,4,3,4,5,4,5,6 98,99,100,练 习(续),5、Cell宽带数据公司的客户服务中心对值班员工的工作质量进行跟踪评价,评价标准是客户对值班员工的“满意”投票数量与总投票数量的比值。如下表所示:,Tenny需要编写一个shell脚本,读入“满意”投票数量和总投票数量,然后计算并输出相应的评定等级。,比,值,(%),等,级,Less then 70,Average,Between 70 and 95,Good,Greater then 95,Excellent,练 习(续),6、Cell宽带数据公司向客户提供一种菜单式的查询服务,如下表所示:,Tenny需要编写一个shell脚本,显示服务菜单。当客户选择某一项服务后输出相应的服务内容。,序,号,服,务,名,称,服,务,内,容,1,查询费用(Bill query),显示客户每月的费用,2,业务咨询(Consulting),获取业务的使用方法,3,最新消息(News),显示产品推广和优惠活动等,4,投诉(Complain),接受客户的投诉和建议,练 习(续),7、Cell宽带数据公司需要录入客户的资料并保存到文件,每个客户的资料保存在单独的一行。格式如下:,客户号:姓名:地址:电话:邮政编码,其中要求客户号由系统自动产生,从10001起。,Tenny需要编写一个Shell脚本,提示输入每项数据,并按照规定的格式保存到文件。录入完一个客户的资料后,提示是否继续。按“y”继续录入下一客户,“n”退出。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!