![Linux系统管理与服务器配置-基于CentOS 7(第2版) 课件 第8章Shell编程入门_第1页](http://file4.renrendoc.com/view8/M03/0B/02/wKhkGWcKY3GAOAzjAAEDaio-4A8750.jpg)
![Linux系统管理与服务器配置-基于CentOS 7(第2版) 课件 第8章Shell编程入门_第2页](http://file4.renrendoc.com/view8/M03/0B/02/wKhkGWcKY3GAOAzjAAEDaio-4A87502.jpg)
![Linux系统管理与服务器配置-基于CentOS 7(第2版) 课件 第8章Shell编程入门_第3页](http://file4.renrendoc.com/view8/M03/0B/02/wKhkGWcKY3GAOAzjAAEDaio-4A87503.jpg)
![Linux系统管理与服务器配置-基于CentOS 7(第2版) 课件 第8章Shell编程入门_第4页](http://file4.renrendoc.com/view8/M03/0B/02/wKhkGWcKY3GAOAzjAAEDaio-4A87504.jpg)
![Linux系统管理与服务器配置-基于CentOS 7(第2版) 课件 第8章Shell编程入门_第5页](http://file4.renrendoc.com/view8/M03/0B/02/wKhkGWcKY3GAOAzjAAEDaio-4A87505.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章Shell编程入门Linux系统管理与服务器配置——基于CentOS7目录8.1项目一:第一个Shell程序Helloworld 8.1.1创建Shell程序 8.1.2设置执行权限 8.1.3执行Shell程序 8.2项目二:猜数字游戏程序8.2.1Shell的语法介绍 8.2.2输入/输出内部命令 8.2.3条件测试 8.2.4流程控制语句 8.2.5函数 8.2.6处理参数 8.2.7调试Shell程序 8.3Shell程序设计实例 本章小结8.1项目一:第一个Shell程序HelloworldShell编程的初学者使用guestuser1账号登录系统,在Linux环境下编写第一个Shell程序first,在屏幕上输出“Helloworld”。序号知识点详见章节1创建Shell程序8.1.12设置执行权限8.1.23执行Shell程序8.1.38.1.1创建Shell程序与DOS系统中的批处理文件类似,Linux系统中的脚本文件(Shell程序)是一个文本文件,包含各类Shell命令。通过脚本文件,Shell命令汇集在一起被连续执行。与高级程序设计语言类似,Shell也提供了输入/输出、流程控制等命令。8.1.1创建Shell程序8.1项目中创建Shell程序的步骤:$cd$mkdirbin//在用户工作目录中创建一个保存脚本的子目录bin。$cdbin//切换到bin目录中。$vimfirst//使用vim命令编写名为first的脚本,该脚本程序保存到bin目录中。#!/bin/sh#告诉系统,该文件的代码将用/bin/sh来执行。VAR="Helloworld"#给变量var定义了一个字符串值。echo$VAR#将变量var的值显示输出到终端。8.1.2设置执行权限通常要执行脚本文件,需要为脚本文件设置执行权限。可以使用以下命令完成对first脚本文件权限的设置:$chmodu+xfirst上面的命令只是给文件所有者设置执行权限。如果同组用户或者其他用户也需要执行该脚本文件,可使用以下命令设置权限:$chmoda+xfirst注意:Linux中的脚本文件与DOS或Windows中的批处理程序不同,不能通过扩展名来识别,即不可为脚本文件设置任意扩展名,而必须通过为脚本文件添加执行权限来允许其执行。8.1.3执行Shell程序执行脚本文件的方式有多种,这里介绍两种方法:使用Shell程序执行和直接执行。1.使用Shell程序执行脚本文件是使用文本文件格式保存的,可通过/bin目录中名为sh的程序进行解释执行。以这种方式执行脚本文件时,不需要设置脚本文件的可执行权限。例如,8.1项目中的脚本,可使用以下命令执行:$shfirst这种方式实际上是调用一个新的bash程序,将Shell程序文件名作为参数传递给新的bash程序。使用这种方法的优点是可以利用Shell程序的调试功能。8.1.3执行Shell程序2.直接执行执行脚本文件更常用的方式是直接执行,即在Shell提示符后面输入脚本文件名即可。要用这种方式执行脚本文件,需首先设置该文件的执行权限。例如,执行8.1项目中的脚本,可使用以下命令执行:$./first在Shell提示符后面输入脚本文件名进行执行时,系统将首先在设置的搜索路径中查看指定的文件名,找到就开始执行,若未找到,最后将显示错误提示。如果执行当前目录下的脚本文件,通常使用一个点表示当前目录,如执行当前目录中的脚本文件test,可使用命令:$./test。8.1项目一:第一个Shell程序Helloworld操作过程:$cd$mkdirbin$cdbin$vimfirst#!/bin/shVAR="Helloworld"echo$VAR$chmoda+xfirst$./first8.2项目二:猜数字游戏程序为了更深入的学习Shell编程,在Linux环境下编写一个猜数字的小游戏。游戏规则如下:首先程序随机生成一个60以内的整数,然后等待用户的输入。如果用户输入的是一个整数则转到下一步,否则显示错误提示信息并重新输入。如果用户输入的整数比随机数大,程序提示“Toolarge!”。如果用户输入的整数比随机数小,程序提示“Toosmall!”。如果用户输入的整数与随机数相等,程序提示“Guessed,youareclever!”。8.2项目二:猜数字游戏程序序号知识点详见章节1Shell语法介绍8.2.12输入/输出命令8.2.23条件测试8.2.34流程控制语句——分支/循环8.2.45函数的定义与使用8.2.56命令行参数的处理8.2.67Shell程序调试8.2.78.2.1Shell的语法介绍1.环境变量指与Shell执行的环境相关的一些变量。环境变量在Shell启动时就已定义好,用户也可以重新定义。要查看系统中的各环境变量,可使用set命令。常用的环境变量HOME:登录用户工作目录的完全路径名。
LOGNAME:当前用户名。PATH:用冒号分隔的目录搜索路径。Shell执行命令时,将按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。PSI:系统提示符,系统管理员的提示符为“#”,而普通用户的提示符是“$”。PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化。
UID:当前用户的标识符,取值是由数字构成的字符串。8.2.1Shell的语法介绍2.自定义变量户自定义变量的最简单格式如下:变量名=变量值若要定义一个只读变量,则使用以下格式:readonly变量名=变量值只读变量的值在后面的代码中不允许被修改。通过上面方式定义的变量都只是当前Shell的局部变量,因此,不能被在Shell中运行的其他命令或Shell程序访问(该变量只能在当前代码文件中使用)。若要定义全局变量,可使用以下格式:export变量名=变量值全局变量在以后运行的所有命令或程序中都可以被访问。8.2.1Shell的语法介绍3.引用变量在Shell程序中引用环境变量或自定义变量,可使用以下格式:$变量名即在变量名前加上一个“$”符号。在8.2项目中就是用$PRICE、$NUM方式来引用变量进行比较运算的。8.2.1Shell的语法介绍4.预定义变量系统的预定义变量与前面介绍的环境变量相似,也是在Shell启动时就定义好的。与环境变量不同的是,用户不能修改预定义变量,只能引用这些变量。所有预定义变量都是由“$”符号和另个符号组成的,常用的S预定义变量有:$#:位置参数的数量。$*:所有位置参数的内容。$?:命令执行后返回的状态。$$:当前进程的进程号。$!:后台运行的最后一个进程号。$0:当前执行的进程名。8.2.2输入/输出内部命令1.echo使用echo命令可显示Shell程序的执行情况。命令格式:echo参数echo命令将跟随其后的内容显示在终端上。若echo之后的内容是一个字符串,则直接显示这些字符;若echo命令后面的参数中包含变量,则将显示变量的内容,而不是变量名称。2.read使用read命令可接收用户输入的字符串。命令格式:read变量名列表该命令从标准输入中读入一行,分解储层若干部分,分别复制给read命令后面的变量名列表中各对应的变量。8.2.2输入/输出内部命令〖例8.1〗编写一个Shell程序,接收用户输入的用户名和电话号码,然后将这些信息显示在终端上,并保存到contact.txt文件中。8.2.3条件测试1.测试命令的执行结果执行任何Linux命令都可能存在两种状态:正确或错误。若前一条命令正确执行,则返回的状态值为0:若返回值为非0值,则表示执行命令出错。使用预定义变量“$?”可返回命令执行后的状态。在Shell程序中可以根据预定义变量“$?”的值,来判断前一条命令执行是否正确。8.2.3条件测试2.测试文件的状态在Shell程序中,测试某个文件的状态时,通常使用以下格式[测试表达式]注意:在上面的格式中,中括号“[]”与测试表达式之间必须有一个空格来分隔。测试文件状态可使用以下参数。-e文件名:若文件存在,返回真。-r文件名:若文件存在且可读,返回真。-w文件名:若文件存在且可写,返回真。-x文件名:若文件存在且可执行,返回真。-s文件名:若文件存在且至少有一个字符,返回真。-d文件名:若文件存在且是目录,返回真。-f文件名:若文件存在且为普通文件,返回真。-c文件名:若文件存在且为字符型特殊文件,返回真。-b文件名:若文件存在且为块特殊文件,返回真。8.2.3条件测试〖例8.2〗编写测试文件的Shell程序,判断用户输入的文件名是否为目录,若是目录,则输出“Directory!”;若不是目录,则输出“NotDirectory!”。8.2.3条件测试3.测试数据的值在进行数据值判断时,可使用以下参数来测试数据值的状态。-eq:判断是否相等,与高级程序设计语言中的“==”类似。-ne:判断是否不相等,与高级程序设计语言中的“!=”或“<>”类似。-gt:判断是否大于,与高级程序设计语言中的“>”类似。-ge:判断是否大于或等于,与高级程序设计语言中的“>=”类似。-lt:判断是否小于,与高级程序设计语言中的“<”类似。-le:判断是否小于或等于,与高级程序设计语言中的“<=”类似。8.2.3条件测试4.测试字符串在进行字符串判断时,可使用以下参数来判断字符串的状态。=:判断两个字符串是否相等。!=:判断两个字符串是否不等。-z字符串:若字符串长度为0,返回真。-n字符串:若字符串长度不为0,返回真。8.2.3条件测试5.逻辑操作符如果有多个测试条件,还可以使用逻辑操作符来进行连接,逻辑操作符有以下3个。!:逻辑非操作符,对已有逻辑值取反。-a:逻辑与操作符(and),当两个测试条件都成立时,才返回真。-o:逻辑或操作符(or),,只要两个测试条件中有一个条件成立,就返回真。当多个逻辑操作符同时出现在测试条件时,其优先级为“!”最高、“-a”次之、“-o”最低。8.2.4流程控制语句1.if-else条件语句通过if-else条件语句来进行程序的分支流程控制,该语句的一般格式如下:if条件测试命令串then
条件为真时执行的命令else
条件为假时执行的命令fi从以上格式可看出,Shell与其他高级程序设计语言不同,then需要另起一行来书写,若需要与if写在同一行,则需要在“条件测试命令串”右侧添加一个分号(;),以如下形式来使用:8.2.4流程控制语句2.if-elif-else条件语句对于多分支的情况,可以使用if条件语句的嵌套来完成,,该语句的一般格式如下:if条件测试命令串1then
条件1为真时执行的命令elif条件测试命令串2then
条件2为真时执行的命令......elif条件测试命令串nthen
条件n为真时执行的命令else
条件n为假时执行的命令fi8.2.4流程控制语句3.case条件语句。case条件语句可从多个分支中选择一个分支来执行,该语句的格式如下:case条件测试命令串in表达式1)
分支1执行的命令;;表达式2)
分支2执行的命令......表达式n)
分支n执行的命令;;*)
其他命令esac8.2.4流程控制语句〖例8.3〗编写Shell程序,判断文件的类型。Linux中的文件与DOS中不太一样,DOS中的大部分文件可通过扩展名来识别类型,但Linux中的文件,如可执行文件,可以没有扩展名,要求编写程序,判断用户输入的文件类型。8.2.4流程控制语句3.for循环语句对于一些需要反复执行的命令,可使用循环语句来控制。for循环语句就是一个常用的循环语句。for循环对每一个变量可能的值循环执行一个命令串。赋给变量的几个数值既可以在程序内以数值列表的形式提供,也可以在程序以外用位置参数的形式提供。该语句的格式如下:for变量名[in数值列表]do
循环执行的命令串done在上面的结构中,变量名可由用户进行设置,变量将逐个从“in数值列表”中取出值,参与“循环执行的命令串”中的操作。8.2.4流程控制语句〖例8.4〗在使用ls命令查看当前工作目录的文件名列表时,将在一行中显示多个文件名。要求编写Shell程序,将每一个文件名显示在一行中。
8.2.4流程控制语句4.while和until循环语句while和until循环都用于不断地重复执行一系列命令,也可从输入文件中读取数据。通过命令的返回状态值来控制循环。while循环语句的格式如下:While循环条件命令串do
循环执行的命令串done在while语句中,只要“循环条件命令串”的返回状态为真,while循环就继续执行,直到“循环条件命令串”的返回状态为假,退出循环。〖例8.5〗使用while循环编写Shell程序,计算1-9的平方。8.2.4流程控制语句until循环语句的格式如下:until循环条件命令串do循环执行的命令串doneuntil循环语句和while循环语句基本相同,两者的区别在于,while循环在条件为真时继续执行循环,而until循环则是在条件为假时继续执行循环。8.2.4流程控制语句5.break和continue语句在循环执行的命令串中,有时可能需要根据条件退出循环或跳过一些循环步,这时可使用break和continue语句。使用break语句,可立即终止当前循环的执行;使用contiune语句,可不执行循环后面的语句,立即开始下一次循环的执行。这两条语句只有放在循环语句的do和done之间才有效。8.2.5函数在Shell中,允许将一组命令集或语句组成一个可重复使用的块,这些块成为Shell函数。函数定义的基本格式为:函数名(){
命令串}8.2.6处理参数1.位置参数调用Shell程序时,除输入Shell程序文件名外,还可以在后面跟上多个参数。由于参数与在命令行中的位置有关,因此称为位置参数。各位置参数之间用空格分隔,用$1表示第1个参数,$2表示第2个参数,以此类推。而$0是一个特殊的变量,其内容是当前Shell程序的文件名。当有多个位置参数时,可以使用shift命令来逐个向左移动参数。这样,通过移动参数,程序中只需使用$1就可以逐个访问所有位置的参数。〖例8.6〗编写Shell程序,要求程序逐个处理传入的位置参数。8.2.6处理参数2.函数参数向函数传递参数与给一般脚本文件传递参数一样,使用预定义变量$1~$9来传递参数。函数取得所传参数后,将原始参数传回Shell脚本文件。在函数定义时不用带参数说明,在调用函数时直接传递参数即可。〖例8.7〗编写一个求累加和的函数,该函数将所有参数的值进行累加。8.2.7调试Shell程序1.一般错误由于Shell程序没有一个集成的开发环境,在一般的文本编辑器(如vim)中输入程序代码,编辑器并不会对语法进行检查,因此,输入代码时经常会出现各种输入性错误。下面是一些常见的错误情况。输入错误:如输入错误关键字、大量的符号漏输入一部分等。字母大小写错误:在Linux中,对大小写字母是严格区分的,输入时容易出错。Shell中所有关键字都用小写字母表示,建议变量名使用大写字母组合来表示。循环错误:由于Shell中的循环控制语句与一般高级程序设计语言有所不同,输入结构时容易出错。8.2.7调试Shell程序2.调试跟踪在Shell中,可通过执行sh命令的方式来调试Shell程序,从而对程序的执行过程进行跟踪。sh命令中主要通过两个选项(-v和-x)来跟踪Shell程序的执行。(1)v选项sh命令的-v选项使Shell在执行程序过程中,将读入的每一个命令行原样输出到终端。(2)-x选项sh命令的-x选项使Shell在执行程序过程中,在执行的每一个命令行首用一个“+”号加上对应的命令显示在终端上,并把每一个变量和该变量的值也显示出来。8.2项目二:猜数字游戏程序$vimguess//编写名为guess的脚本文件。#!/bin/shNUM=$((RANDOM%61))#生成60以内的随机数。echo"Theansweris$NUM"echo"======================="usleep1000000input(){#定义input函数。read-p"Pleaseenteryournumber:"PRICEexpr$PRICE+1&>/dev/nullif[$?-ne0]#判断输入的值是否为整数。thenecho"Pleaseenteraninteger!"#提示错误信息。input#调用input函数重新输入。fi}8.2项目二:猜数字游戏程序guess(){#定义guess函数。if[$PRICE-eq$NUM];then#判断输入的PRICR与随机数NUM是否相等。echo"Guessed,youareclever!"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 经销商销售奖励补充协议范本
- 公司之间保密协议书范本
- 现代教育技术下的个性化教学计划设计
- 生物质能源在交通领域的替代作用与前景
- 工程项目合同还款协议
- 现代办公环境下的绿色建筑施工技术研究
- 电子病历系统建设及管理案例分享
- 2024年高中化学第二章1第1课时烷烃和烯烃练习含解析新人教版选修5
- 2024-2025学年高中地理第一章自然灾害概述第三节人类活动与自然灾害学案中图版选修5
- 电商平台的短视频营销策略分析
- 古籍文献整理与研究
- 促销主管工作计划
- 2024年管理学理论考核试题及答案
- 关键工序特殊过程培训课件精
- 手术体位相关周围神经损伤及预防课件
- 轮机备件的管理(船舶管理课件)
- 【活教育】陈鹤琴现代儿童教育学说
- 《机修工基础培训》课件
- 统编《道德与法治》三年级下册教材分析
- 《介入放射学》电子教材
- 纺织材料学课件第二章-植物纤维(棉)
评论
0/150
提交评论