- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第13章节 Shell编程
第13章 Shell编程 一个Shell脚本可以包含一个或多个命令,通过编写Shell脚本可以简化很多原本需要手工输入大量命令的任务。在本章中将对Shell脚本的基本原理、条件测试、控制结构、用户交互以及保留变量等的内容进行介绍。 13.1 Shell编程简介 Shell除了是命令解释器外还是一种脚本编程语言,通过编写该脚本可以自动运行多条命令,简化手工操作。要运行一个Shell脚本文件,必须要为它添加执行权限。本节将对Shell脚本的功能、使用、结构等内容进行简单介绍,最后会编写一个简单的“Hello World”脚本演示编写并执行该脚本的步骤。 13.1.1 什么是Shell脚本 Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令。除此之外,Shell还有另外一种功能,如果你要执行多条命令,它可以让你将这组命令存放在一个文件中,然后你可以象执行Linux系统提供的其他程序一样执行这个文件,这个命令文件就叫做Shell程序或者Shell脚本。当运行这个文件时,它会像在命令行输入这些命令一样顺序地执行它们。 13.1.2 编写Shell脚本 作为本章的第一个脚本,下面就以编写一个简单的“Hello World”程序为例,演示在Linux系统中编写并执行Shell脚本程序的完整步骤,如下所示。 (1)使用VI或者其他任意的文本编辑工具创建一个名为HelloWorld.sh的文件。 (2)为HelloWorld.sh文件添加执行权限。 (3)运行HelloWorld.sh脚本。 13.2 条件测试 在编写Shell脚本时,有时要先测试字符串是否一致、数字是否相等或者检查文件状态,然后基于这些测试的结果再做进一步动作,这就是条件测试。Shell脚本的条件测试可以用于测试字符串、文件状态和数字,同时它也可以结合13.3节中所介绍的控制结构进行使用。测试完成后可以通过$?获取测试的结果,其中0表示正确,1表示错误。 13.2.1 数值测试 数值测试用于对两个数值进行比较并得出判断结果,包括:等于、不等于、大于、大于等于、小于和小于等于等。数值判断的格式如下所示。 [ 数值1 关系运算符 数值2 ] 13.2.2 字符串测试 字符串测试可以对两个字符串的值进行比较,也可以测试单个字符串的值是否为空或者非空。字符串测试的格式如下所示。 [ 关系运算符 字符串 ] [ 字符串1 关系运算符 字符串2 ] 13.2.3 文件状态测试 Linux的Shell脚本支持对文件状态的检测,包括检测文件的类型、文件的权限和文件的长度等,其格式如下所示。 [ 关系运算符 字符串 ] 13.2.4 条件测试的逻辑操作符 前面介绍的条件测试都是只针对一个条件的,如果要同时对多个条件进行测试,例如要同时比较两个文件的类型,这时就要使用逻辑操作符。Shell提供了3种逻辑操作符: -a:逻辑与,只有当操作符两边的条件均为真时,结果为真;否则为假。 -o:逻辑或,操作符两边的条件只要有一个为真,则结果为真;只有当两边所有条件为假时,结果为假。 !:逻辑否,条件为假,结果为真。 13.3 控制结构 通过Shell提供的各种控制结构,可以在Shell脚本中根据条件的测试结果控制脚本程序的执行流程。在Shell脚本中支持的控制结构有:if-then-else、case、for、while和until,本节将对这些控制结构逐一进行介绍。 13.3.1 if-then-else分支结构 if-then-else是一种基于条件测试结果的流程控制结构。如果测试结果为真,则执行控制结构中相应的命令列表,否则将进行另外一个条件测试或者退出该控制结构。其语法格式如下: if 条件1 then 命令列表1 elif 条件2 then 命令列表2 else 命令列表3 fi 13.3.2 case分支结构 if-then-else结构能够支持多路的分支(多个elif语句),但如果有多个分支,那么程序就会变得难以阅读。case结构提供了实现多路分支的一种更简洁的方法,其语法格式如下: case 值或变量 in 模式1) 命令列表1 ;; 模式2) 命令列表2 ;; esac 13.3.3 for循环结构 for循环结构可以重复执行一个命令列表,基于for语句中所指定的值列表决定是继续循环还是跳出循环。for循环在执行命令列表前会先检查值列表中是否还有未被使用的值,如有,则把该值赋给for语句中指定的变量,然后执行循环结构中的命令列表。如此循环,直到值列表中的所有值都被使用。 1.以常量作为值列表 2.以变量作为值列表 3.以命令运行结果作为值列表 13.3.4 expr命令计数器 在继续介绍后面的内容前,有必要先介
文档评论(0)