Linux课程介绍-第四章.ppt

上传人:tia****nde 文档编号:11497026 上传时间:2020-04-25 格式:PPT 页数:83 大小:673.50KB
返回 下载 相关 举报
Linux课程介绍-第四章.ppt_第1页
第1页 / 共83页
Linux课程介绍-第四章.ppt_第2页
第2页 / 共83页
Linux课程介绍-第四章.ppt_第3页
第3页 / 共83页
点击查看更多>>
资源描述
2010年秋季,北京理工大学珠海学院计算机学院,Linux系统管理与应用,计算机科学教研室主讲:胡敬朋,本章教学安排,一、教学目的、要求:本章要求掌握Linux下shell的使用方法。主要介绍Linuxshell的语法结构、变量定义以及赋值引用、标点符号、控制语句等。二、教学内容第1节shell概述第9节控制结构第2节命令历史第10节函数第3节名称补全第11节作业控制第4节别名第12节shell内置命令第5节shell特殊字符第13节shell脚本调试第6节shell变量第7节参数置换变量第8节算术运算,三、重点内容shell的主要特点、类型、建立和执行的方式bash变量的分类、定义形式及引用规则各种控制语句的格式、功能及流程bash中算术运算的使用bash函数的构成及使用规则bash中的内置命令采用图表和板书重点讲解,第四章LinuxShell程序设计,第1节shell概述第9节控制结构第2节命令历史第10节函数第3节名称补全第11节作业控制第4节别名第12节shell内置命令第5节shell特殊字符第13节shell脚本调试第6节shell变量第7节参数置换变量第8节算术运算,4.1shell概述,4.1.1shell的特点和主要版本4.1.2shell程序示例4.1.3shell脚本的建立和执行,4.1.1shell的特点和主要版本,作为命令解释程序一种高级程序设计语言,它有变量,关键字,有各种控制语句,如if、case、while、for等语句,支持函数模块,有自己的语法结构1.shell的特点组合新命令提供了文件名扩展字符直接使用shell的内置命令灵活地使用数据流结构化的程序模块在后台执行命令可配置的环境高级的命令语言,2shell的种类(1)Bourneshell(简称sh)(2)Cshell(简称csh)(3)Kornshell(简称ksh)(4)BourneAgainshell(即bash),4.1.2shell程序示例,【例4.1】由三条简单命令组成的shell程序(文件名为ex1)。$catex1datepwdcd.,【例4.2】带有控制结构的shell程序(文件名为ex2)。$catex2#!/bin/bash#Ifnoarguments,thenlistingthecurrentdirectory.#Otherwise,listingeachsubdirectory.iftest$#=0thenls.elseforidols-l$i|grepddonefi,4.1.3shell脚本的建立和执行,1、shell脚本的建立2、执行shell脚本的方式执行shell脚本的方式基本上有三种:(1)输入定向到shell脚本$bashabc3输出附加定向符一般形式是:命令文件名如:$ps-lpsfile输入和输出重新定向可以连在一起使用。例如:$wc-loutfile,4即时文件定向符即时文件的形式是:命令参数标记符输入行标记符注意:标记符要成对出现例如:mail$1文件名标准输出和标准错误输出可以重定向到同一个文件,一般形式是:command$file等价于下面形式的命令:commandfile2who|wc-l;cd/usr/bin2逻辑与命令1who;|pr使用花括号时在格式上应注意:左括号“”后面应有一个空格;右括号“”之前应有一个分号(;)2()形式(echoCurrentdirectoryispwd.cd/home/mengqc;ls-l;cpm1em1cd/home/mengqc;ls-d),4.6.2数组,bash只提供一维数组,并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。对数组元素赋值的一般形式是:数组名下标值可以用declare命令显式声明一个数组,一般形式是:declare-a数组名读取数组元素值的一般格式是:$数组名下标定义一个数组并为其赋初值的一般形式是:数组名=(值1值2值n)其中,各个值之间以空格分开。若没有给出数组元素的下标,则数组名表示下标为0的数组元素使用*或当作下标,则会以数组中所有元素取代*或,4.6.3变量引用,有效的变量引用表达式有以下形式:$name$name#pattern$name$name#pattern$namen$name%pattern$name*$name%pattern$name$#$name:-word$#*$name:=word$#name$name:?word$#name*$name:+word$#name,表达式$name表示变量name的值,若变量未定义,则用空值替换。表达式$name将被变量name的值替换。用花括号括起name,目的在于把变量名与后面的字符分隔开,避免出现混淆。替换后花括号被取消。$namen表示数组变量name中第n个元素的值。表达式$name*和$name都表示数组name中所有非空元素的值,每个元素的值用空格分开。如果用双引号把它们都括起来,那么二者的含义就有区别:对于$name*,它被扩展成一个词(即字符串),这个词由以空格分开的各个数组元素组成;对于$name,它被扩展成多个词,每个数组元素是一个词。如果数组name中没有元素,则$name被扩展为空串。,表达式$name:-word、$name:=word、$name:+word、$name:?word的计算方法在4.7节中介绍表达式$name#pattern和$name#pattern如果pattern(Shell模式)与name值的开头匹配,那么name的值去掉匹配部分后的结果就是该表达式的值;否则,name的值就是该表达式的值。在第一种格式中,name值去掉的部分是与pattern匹配的最少的部分;而第二种格式中,name值去掉的部分是与pattern匹配的最多的部分。表达式$name%pattern和$name%pattern如果pattern与name值的末尾匹配,那么name的值中去掉匹配部分后的结果就是该表达式的值;否则,该表达式的值就是name的值。在第一种格式中,去掉的部分是最少的匹配部分;而第二种格式中,去掉的部分是最多的匹配部分。,表达式$#和$#*它们的值分别是由$和$*返回的参数的个数。表达式$#namei该表达式的值是数组name第i个元素值的长度(字符个数)。表达式$#nane*和$#name它们的值都是数组name中已经设置的元素的个数。,4.6.4输入/输出命令,1read命令可以利用read命令从键盘上读取数据,然后赋给指定的变量。read命令的一般格式是:read变量1变量2变量个数与给定数据个数相同,则依次对应赋值变量个数少于数据个数,则从左至右对应赋值,但最后一个变量被赋予剩余的所有数据。变量个数多于给定数据个数,则依次对应赋值,而没有数据与之对应的变量取空串2echo命令显示其后的变量值或者直接显示它后面的字符串如果echo命令带有选项“-e”,那么在其后的参数中可以有以下转义字符:abcefnrtvmxm,【例4.6】这是一个特洛伊木马shell脚本示例。echo-nLogin:readnamestty-echoecho-nPassword:readpasswdechosttyechoecho$name$passwd/tmp/tttpr*)elseecho$1isneitherafilenoradirectory.fi,if的语句的更一般形式是:if命令表1then命令表2else命令表3fi,4.9.2条件测试,条件测试有三种常用形式:一种是用test命令,如上所示。另一种是用一对方括号将测试条件括起来。这两种形式是完全等价的。例如,测试位置参数$1是否是已存在的普通文件,可写为:test-f$1也完全可写成:_-f$1“_第三种形式是:条件表达式test命令可以和多种系统运算符一起使用。这些运算符可以分为四类:文件测试运算符、字符串测试运算符、数值测试运算符和逻辑运算符。,1有关文件方面的测试,2有关字符串方面的测试,3有关数值方面的测试,4逻辑运算符上述测试条件可以在if语句或循环语句中单个使用,也可以通过逻辑运算符把它们组合起来使用。可以在测试语句中使用的逻辑运算符有:!逻辑非(NOT),它放在任意逻辑表达式之前,使原来为真的表达式变为假,使原来为假的变为真。例如,!-r$1,!test-r“$1”等。-a逻辑与(AND),它放在两个逻辑表达式中间,仅当两个表达式都为真时,结果才为真。例如,-f$myfile-a-r“$myfile-o逻辑或(OR),它放在两个逻辑表达式中间,其中只要有一个表达式为真,结果就为真。例如,$a-ge0-o$b-le100,(表达式)圆括号,它可以把一个逻辑表达式括起来,使之成为一个整体,优先得到运算。例如,($a-ge0)-a($b-le100)逻辑表达式中的条件测试运算符优先级高于“!”运算符,“!”运算符的优先级高于“-a”运算符,“-a”运算符高于“-o”,而且圆括号()高于“-a”5特殊条件测试(1):表示不做任何事情,其退出值为0。(2)true表示总为真,其退出值总是0。(3)false表示总为假,其退出值是255。,4.9.3case语句,case语句允许进行多重条件选择。其一般语法形式是:case字符串in模式字符串1)命令命令;模式字符串2)命令命令;模式字符串n)命令命令;esac,在使用case语句时应注意:每个模式字符串后面可有一条或多条命令,其最后一条命令必须以两个分号(即;)结束。模式字符串中可以使用通配符如果一个模式字符串中包含多个模式,那么各模式之间应以竖线(|)隔开,表示各模式是“或”的关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令表各模式字符串应是唯一的,不应重复出现。并且要合理安排它们的出现顺序。case语句以关键字case开头,以关键字esac(是case倒过来写!)结束。case的退出(返回)值是整个结构中最后执行的那个命令的退出值。若没有执行任何命令,则退出值为零,4.9.4while语句,shell中有三种用于循环的语句,它们是:while语句、for语句和until语句。while语句的一般形式是:while测试条件do命令表done测试条件部分除使用test命令或等价的方括号外,还可以是一组命令。根据其最后一个命令的退出值决定是否进入循环体执行。,4.9.5until语句,until语句的一般形式是:until测试条件do命令表done它与while语句很相似,只是测试条件不同:当测试条件为假时,才进入循环体,直至测试条件为真时终止循环。,4.9.6for语句,其使用方式主要有两种:一种是值表方式,另一种是算术表达式方式。1值表方式其一般格式是:for变量in值表;do命令表;done根据循环变量的取值方式,其使用格式可分为三种:格式一:for变量in值表do命令表done,格式二:for变量in文件正则表达式do命令表done格式三:foriin$*或者foridodo命令表命令表donedone,2算术表达式方式其一般格式是:for(e1;e2;e3);do命令表;done或者for(e1;e2;e3)do命令表done其中,e1,e2,e3是算术表达式。它的执行过程与C语言中for语句相似,即:先按算术运算规则计算表达式e1;接着计算e2,如果e2值不为0,则执行命令表中的命令,并且计算e3;然后重复,直至e2为0,退出循环。,4.9.7break命令和continue命令,1break命令break命令使程序从循环体中退出来。其语法格式是:breakn2continue命令continue命令跳过循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。其语法格式是:continuen,4.9.8exit命令,exit命令的功能是立即退出正在执行的shell脚本,并设定退出值。其语法格式是:exitn,4.9.9select语句,select语句通常用于菜单的设计,它自动完成接收用户输入的整个过程,包括显示一组菜单项以及读入用户的选择。select语句的语法形式为:selectidentifierinworddo命令表done如果inword这一部分被省略,那么参数identifier就以位置参数($1,$2,)作为给定的值。,4.10函数,在shell脚本中可以定义并使用函数。其定义格式为:function函数名()命令表函数应先定义,后使用。调用函数时,直接利用函数名,如showfile,不必带圆括号shell脚本与函数间的参数传递可利用位置参数和变量直接传递通常,函数中的最后一个命令执行之后,就退出被调函数。也可利用return命令立即退出函数,其语法格式是:returnn,4.11作业控制,执行命令set-omonitor,则交互式shell就实施作业管理。作业管理的命令有jobs,kill,bg,fg和wait。4.11.1jobs命令不带参数时,可列出当前尚未完成的作业。例如:$jobs2+Donewhowc-cd1-Stopped(SIGTTOU)manlsexit012315如果arg是空串,如:trap2那么,信号2就被shell和它引用的命令忽略。如果缺省arg,则把所有陷入信号n的动作恢复成原来系统设置的动作。如:trap12如果trap命令后面没有任何参数,则显示与每个信号相关的命令表。,6type命令格式是:typename功能是,对于每一个name,如果作为命令名,它是如何被解释的,如内置命令、一般命令搜索路径等。7unset命令格式是:unsetname删除由name指定的相应变量或函数。应注意,变量PATH,PS1,PS2,MAILCHECK和IFS不能被删除,即不能受unset的作用。,8umask命令格式是umask-Smask将用户文件创建掩码设置为mask的值。9wait命令格式是:waitn等待由n(进程ID)指定的进程终止,并报告终止状态。,4.13shell脚本调试,通常采用自底向上的方法,即:先搞清楚要脚本做什么,然后将过程的连续阶段分解为独立的步骤,最后利用shell提示符,交互式地检查和调试每个独立的步骤。编写的脚本无法执行的原因除脚本文件缺少“执行”权限外,有两种可能:执行脚本的环境设置不对和脚本本身有错误。,4.13.1解决环境设置问题,不能直接在其他shell下运行bash脚本,解决的办法是在脚本的第一行写上:#!/bin/bash在PATH环境变量中没有包括“.”(当前工作目录)。解决办法是设置PATH:PATH=$PATH:.脚本文件与已存在命令的名字相同。,4.13.2解决脚本错误,基本的错误类型有两种:语法错误和逻辑错误。语法错误是编写程序时违反了所用编程语言的规则而造成的。逻辑错误通常是由于程序的逻辑关系存在问题。对此类问题需要进行程序调试。一个很有用的技巧是使用set命令打开-x选项,或者在启动shell时使用-x选项将shell设置成跟踪模式。另一个有用的技巧是在程序中经常使用echo或print命令,
展开阅读全文
相关资源
相关搜索

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


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

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


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