Linux_脚本.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux_脚本

第19讲使用数值运算 如何使用数值运算? 如何获取命令返回的结果? 如何使用算术展开? 【问题的提出】 Geecy软件开发公司的开发人员Tom已经开发了如下的一个脚本phone.sh : 【问题的提出】(续) 该脚本将从键盘接收用户输入的名字和电话号码,然后以冒号分隔的形式添加一行到文件file.txt的末尾。 现在,Tom需要修改该脚本的数据存放格式,在原格式的基础上增加一个编号,即以“编号:姓名:电话号码”的格式保存每一行数据。要求编号从1001开始,以后每一行递增1。 【问题分析】 Tom已经有了解决思路: (1)首先使用一个辅助文件count_file.txt保存一个起始编号1001; (2)从文件count_file.txt读入该编号保存到变量Count; (3)从屏幕读取用户输入的姓名并保存到变量Name; (4)从屏幕读取用户输入的电话号码并保存到变量Phone; (5)以 “编号:姓名:电话号码”的格式添加一行信息到数据文件file.txt; (6)把变量Count的值增加1; (7)把变量保存到文件count_file.txt并覆盖原来的内容; 【问题分析】(续) 使用这种方法,Tom只需要对文件count_file.txt的内容手工做一次初始化,以后就可以重复运行该修改后的脚本phone.sh,把用户输入的信息逐行添加到数据文件file.txt。 但问题是,Shell脚本中的变量都被当作是字符串。那么应该如何处理第6步的数值运算操作“把变量Count的值增加1”。 使用expr命令 expr命令是一个简易的命令行计算器,能够进行一些简单的表达式(Expression)的计算。例如: expr 123 + 345 expr $x + 1 获取命令返回的结果 可以使用重定向功能实现。 Shell提供了一个方便的特性,可以简化这类型的操作。通过使用一对反引号(``)把一个命令括起来,把该命令的屏幕输出结果截获并当作一个字符串来使用。例如: echo Time is now `date` 使用算术展开 如果需要更灵活的运算,用户可以使用“$(( … ))”对表达式进行算术展开,即把里面的表达式当作是通常意义上的数学表达式进行数学运算,而不是当作一个普通的字符串。例如: x=$(( x+1 )) 【解决方案】 第20讲 控制脚本流程 引 言 如何测试表达式的逻辑值? 如何设计分支结构? 如何设计循环结构? 【问题的提出】 Geecy软件开发公司的开发人员Tom所开发的通讯录管理脚本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 =

文档评论(0)

wnqwwy20 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档