第三讲 Shell编程2.ppt

上传人:qwe****56 文档编号:80597594 上传时间:2023-03-23 格式:PPT 页数:41 大小:168KB
返回 下载 相关 举报
第三讲 Shell编程2.ppt_第1页
第1页 / 共41页
第三讲 Shell编程2.ppt_第2页
第2页 / 共41页
点击查看更多>>
资源描述

《第三讲 Shell编程2.ppt》由会员分享,可在线阅读,更多相关《第三讲 Shell编程2.ppt(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、主要内容nShell脚本基本编程脚本基本编程nShell脚本高级部分脚本高级部分基本脚本编程基本脚本编程n条件测试条件测试n流程控制流程控制基本脚本编程基本脚本编程条件测试条件测试 if语句用于条件控制结构中,其一般格式为:语句用于条件控制结构中,其一般格式为:if 测试条件测试条件 then 命令命令1 else 命令命令2 fi 其中,其中,if、then、else和和fi是关键字。例如:是关键字。例如:if test -f$1 then echo$1 is an ordinary file.else echo$1 is not an ordinary file.fiif语句中语句中els

2、e部分可以缺省。部分可以缺省。例如,例如,if test -f$1 then echo$1 is an ordinary file.fiif 语句的语句的else部分还可以是部分还可以是elseif结构结构,则用关则用关键字键字“elif”代替代替“else if”。例如,例如,if test -f$1 then pr$1 elif test -d$1 then (cd$1;pr *)else echo$1 is neither a file nor a directory.finif的语句的更一般形式是:的语句的更一般形式是:if 命令表命令表1 then 命令表命令表2 else 命令表命

3、令表3 fi基本脚本编程基本脚本编程条件测试条件测试n条件测试有三种常用形式条件测试有三种常用形式:一种是用:一种是用test 命令,命令,如上所示。另一种是用一对方括号将测试条件括如上所示。另一种是用一对方括号将测试条件括起来。这两种形式是完全等价的。例如,测试位起来。这两种形式是完全等价的。例如,测试位置参数置参数$1是否是已存在的普通文件,可写为:是否是已存在的普通文件,可写为:test -f$1n也完全可写成:也完全可写成:-f$1 n第三种形式是:第三种形式是:条件表达式条件表达式ntest命令可以和多种系统运算符一起使用。这些命令可以和多种系统运算符一起使用。这些运算符可以分为四类

4、:运算符可以分为四类:文件测试运算符文件测试运算符、字符串字符串测试运算符测试运算符、数值测试运算符数值测试运算符和和逻辑运算符。逻辑运算符。基本脚本编程基本脚本编程条件测试条件测试例:例:if结构结构n#!/bin/shnIf$?eq 0nThennecho“command was sucessful.”nelsenecho“An error was encountered.”nfinexitn#命令执行后返回值为0,报告命令执行成n#功,否则报告出错。基本脚本编程基本脚本编程 CASE语句语句n case语句允许进行多重条件选择。语句允许进行多重条件选择。其一般语法其一般语法形式是:形式是

5、:case 字符串字符串 in 模式字符串模式字符串1)命令命令 命令命令;模式字符串模式字符串n)命令命令 命令命令;esacn在使用在使用case语句时应注意:语句时应注意:每个模式字符串后面可有一条或多条命令,每个模式字符串后面可有一条或多条命令,其最后一条命令必须以两个分号其最后一条命令必须以两个分号(即即;)结束。结束。模式字符串中可以使用通配符模式字符串中可以使用通配符 如果一个模式字符串中包含多个模式,那么如果一个模式字符串中包含多个模式,那么各模式之间应以竖线(各模式之间应以竖线(|)隔开,表示各模式)隔开,表示各模式是是“或或”的关系,即只要给定字符串与其中的关系,即只要给定

6、字符串与其中一个模式相配,就会执行其后的命令表一个模式相配,就会执行其后的命令表基本脚本编程基本脚本编程 CASE语句语句 各模式字符串应是唯一的,不应重复出各模式字符串应是唯一的,不应重复出现。并且要合理安排它们的出现顺序。现。并且要合理安排它们的出现顺序。case语句以关键字语句以关键字case开头,以关键字开头,以关键字esac(是是case倒过来写!倒过来写!)结束。结束。case的退出(返回)值是整个结构中最后的退出(返回)值是整个结构中最后执行的那个命令的退出值。若没有执行任何执行的那个命令的退出值。若没有执行任何命令,则退出值为零命令,则退出值为零基本脚本编程基本脚本编程 CAS

7、E语句语句例:例:case结构结构#!/bin/shecho“Enter A,B,C”read lettercase$letter inA|a)echo“you entered A;”B|b)echo“you entered B;”C|c)echo“you entered C”*)echo“not A,B,C”esacnshell中有三种用于循环的语句,它们是:中有三种用于循环的语句,它们是:(1)while语句语句 (2)until语句语句 (3)for语句语句基本脚本编程基本脚本编程流程控制流程控制nwhile语句的一般形式是语句的一般形式是:while 测试条件测试条件 do 命令表命令

8、表 donen其执行过程是:其执行过程是:先进行条件测试,如果结果为先进行条件测试,如果结果为真,则进入循环体(真,则进入循环体(do-done之间部分),执之间部分),执行其中命令,然后在做条件测试行其中命令,然后在做条件测试直至测试直至测试条件为假时,才终止条件为假时,才终止while语句的执行。语句的执行。基本脚本编程基本脚本编程while语句语句 测试条件部分测试条件部分除使用除使用test命令或等价的方括号命令或等价的方括号外,还外,还可以是可以是一组命令一组命令。根据其最后一个命令的退出值决定。根据其最后一个命令的退出值决定是否进入循环体执行。是否进入循环体执行。necho“key

9、 in file name-c”nread filenamenecho“key in data:”nwhile n read xndon echo$x$filenamendonencat$filename基本脚本编程基本脚本编程while语句语句例:例:while结构结构#!/bin/shx=0while“$x”lt 10doecho -n“$x”x=expr$x+1donen until语句的一般形式是:语句的一般形式是:until 测试条件测试条件 do 命令表命令表 donen它与它与while语句很相似,只是测试条件不同:语句很相似,只是测试条件不同:当测试条件为假时,才进入循环体,直

10、至测试当测试条件为假时,才进入循环体,直至测试条件为真时终止循环。条件为真时终止循环。基本脚本编程基本脚本编程until语句语句例:例:until结构结构#!/bin/shx=1until$x ge 10 doecho“$x”x=expr$x+1donenfor arg in list n do n command(s).n done n 注意:在循环的每次执行中,arg 将顺序的存取 list中列出的变量。nlist 中的参数允许包含通配符。基本脚本编程基本脚本编程for语句语句4.9.6 for语句n其使用方式主要有两种:其使用方式主要有两种:一种是值表方式,另一种是值表方式,另一种是算术

11、表达式方式。一种是算术表达式方式。1值表方式值表方式n其一般格式是:其一般格式是:for 变量变量 in 值表值表;do 命令表;命令表;donen根据循环变量的取值方式,其使用格式可分为根据循环变量的取值方式,其使用格式可分为三种:三种:n 格式一:循环变量取自给出的值表格式一:循环变量取自给出的值表 for 变量变量 in 值表值表 do 命令表命令表 done基本脚本编程基本脚本编程for语句语句n格式二:值表可以是文件正则表达式格式二:值表可以是文件正则表达式 for 变量变量 in 文件正则表达式文件正则表达式 do 命令表命令表 donen格式三:值表可以是全部位置参数格式三:值表

12、可以是全部位置参数 for i in$*或者或者 for i do do 命令表命令表 命令表命令表 done done基本脚本编程基本脚本编程for语句语句2算术表达式方式算术表达式方式n其一般格式是:其一般格式是:for(e1;e2;e3)do 命令表命令表 done 其中,其中,e1,e2,e3是算术表达式。它的执行过是算术表达式。它的执行过程与程与C语言中语言中for语句相似,即:语句相似,即:先按算术运算先按算术运算规则计算表达式规则计算表达式e1;接着计算接着计算e2,如果,如果e2值值不为不为0,则执行命令表中的命令,并且计算,则执行命令表中的命令,并且计算e3;然后重复然后重复

13、,直至,直至e2为为0,退出循环。,退出循环。基本脚本编程基本脚本编程for语句语句例:for结构#!/bin/shfor i in 0 1 2 3 4 5 6 7 8 9doecho idonefor file in*do ls-l“$file”#列出所有在 当前目录中的所有文件 donefor file in jx*do rm-f$file#只删除当前目录下以j或x开头的文件.echo Removed file$file.done 例:for结构1break命令命令n break命令使程序从循环体中退出来。其语法格命令使程序从循环体中退出来。其语法格式是:式是:break n 2conti

14、nue命令命令n continue命令跳过循环体中在它之后的语句,回命令跳过循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。其语法格到本层循环的开头,进行下一次循环。其语法格式是:式是:continue n break命令和命令和continue命令命令nexit命令的功能是立即退出正在执行的命令的功能是立即退出正在执行的shell脚本,并设定退出值。其语法格式脚本,并设定退出值。其语法格式是:是:exit n exit命令命令Shell编程题目n编写程序列出系统上的所有用户。n在目录的所有文件中查找指定的源字串。Shell脚本高级部分脚本高级部分n函数函数n调试调试n其他其他n在

15、在shell脚本中可以定义并使用函数。其定义格式为:脚本中可以定义并使用函数。其定义格式为:function函数名函数名()命令表命令表 n函数应先定义,后使用。调用函数时,直接利用函数名,函数应先定义,后使用。调用函数时,直接利用函数名,如如showfile,不必带圆括号;,不必带圆括号;nshell脚本与函数间的脚本与函数间的参数传递参数传递可利用可利用位置参数位置参数和和变量变量直直接传递;接传递;n通常,函数中的最后一个命令执行之后,就退出被调函数。通常,函数中的最后一个命令执行之后,就退出被调函数。也可利用也可利用return命令立即退出函数,其语法格式是:命令立即退出函数,其语法格

16、式是:return n 高级脚本编程高级脚本编程函数函数函数 1#!/bin/bash 2 3 JUST_A_SECOND=1 4 5 funky()6#这是一个最简单的函数.7 echo This is a funky function.8 echo Now exiting funky function.9#函数必须在调用前声明.10 11 12 fun()13#一个稍复杂的函数一个稍复杂的函数.14 i=0 15 REPEATS=30 16 17 echo 18 echo And now the fun really begins.19 echo 20 21 sleep$JUST_A_SE

17、COND#嘿嘿,暂停一秒暂停一秒!22 while$i-lt$REPEATS 23 do 24 echo-FUNCTIONS-25 echo-ARE-26 echo 27 echo 28 let i+=1 29 done 30 31 函数函数n函数可以处理传递给它的参数并且能返函数可以处理传递给它的参数并且能返回它的退出状态码回它的退出状态码(exit status)给脚本给脚本后续使用。后续使用。n函数以位置来引用传递过来的参数例如函数以位置来引用传递过来的参数例如$1,$2,以此类推。以此类推。函数的退出和返回函数的退出和返回 n退出状态退出状态(exit status)函数返回一个被称为

18、退出状态的值函数返回一个被称为退出状态的值.退出状退出状态可以由态可以由 return 来指定来指定 statement,否则函否则函数的退出状态是函数最后一个执行命令的退出数的退出状态是函数最后一个执行命令的退出状态状态(0 表示成功表示成功,非非 0 表示出错代码表示出错代码).退出状退出状态态(exit status)可以在脚本可以在脚本$?引用引用.这个机这个机制使脚本制使脚本 C 函数一样有一个函数一样有一个 返回值返回值.nreturn 终止一个函数终止一个函数 return 命令可选地带一个整数参数命令可选地带一个整数参数,这个整这个整数作为函数的数作为函数的返回值返回值返回返回

19、 给调用此函数的脚给调用此函数的脚本本,并且这个值也被赋给变量并且这个值也被赋给变量$?.n 1#!/bin/bash n 2#max.sh:两个整数中的最大者.n 3 n 4 E_PARAM_ERR=-198#如果传给函数的参数少于 2 个时的返回值.n 5 EQUAL=-199#如果两个整数值相等的返回值.n 6#任一个传给函数的参数值溢出 n 7#n 8 n 9 max2()#返回两个整数的较大值.n10#注意:参与比较的数必须小于 257.n11 if -z$2 n12 then n13 return$E_PARAM_ERR n14 fi n15 n16 if$1-eq$2 n17 t

20、hen n18 return$EQUAL n19 else n20 if$1-gt$2 n21 then n22 return$1 n23 else n24 return$2 n25 fi n26 fi n27 28 29 max2 33 34 30 return_val=$?31 32 if$return_val-eq$E_PARAM_ERR 33 then 34 echo Need to pass two parameters to the function.35 elif$return_val-eq$EQUAL 36 then 37 echo The two numbers are eq

21、ual.38 else 39 echo The larger of the two numbers is$return_val.40 fi 调试nBash shell 没有自带调试器,甚至没有没有自带调试器,甚至没有任何调试类型的命令或结构。任何调试类型的命令或结构。n脚本里的语法错误或拼写错误会产生含脚本里的语法错误或拼写错误会产生含糊的错误信息,通常这些在调试非功能糊的错误信息,通常这些在调试非功能性的脚本时没有什么帮助。性的脚本时没有什么帮助。n通常采用通常采用自底向上自底向上的方法,即:先搞清楚要的方法,即:先搞清楚要脚本做什么,然后将过程的连续阶段分解为脚本做什么,然后将过程的连续阶

22、段分解为独立的步骤,最后利用独立的步骤,最后利用shell提示符,交互提示符,交互式地检查和调试每个独立的步骤。式地检查和调试每个独立的步骤。n编写的脚本无法执行的原因除脚本文件缺少编写的脚本无法执行的原因除脚本文件缺少“执行执行”权限外,有两种可能:权限外,有两种可能:执行脚本的执行脚本的环境设置不对环境设置不对和和脚本本身有错误脚本本身有错误。调试4.13.1 解决环境设置问题 不能直接在其他不能直接在其他shell下运行下运行bash脚本,脚本,解决的办法是在脚本的第一行写上:解决的办法是在脚本的第一行写上:#!/bin/bash 在在PATH环境变量中没有包括环境变量中没有包括“.”(

23、当(当前工作目录)。前工作目录)。解决办法是设置解决办法是设置PATH:PATH=$PATH:.脚本文件与已存在命令的名字相同。脚本文件与已存在命令的名字相同。调试错误的脚本 1#!/bin/bash 2#ex74.sh 3 4#这是一个错误的脚本这是一个错误的脚本.5#哪里有错哪里有错?6 7 a=37 8 9 if$a-gt 27 10 then 11 echo$a 12 fi 13 14 exit 0 脚本脚本:./ex74.sh:37:command not found 上面的脚本有什么错误上面的脚本有什么错误(线索线索:注意注意 if 的后面的后面)?丢失关键字(keyword)1#

24、!/bin/bash 2#missing-keyword.sh:会产生什么样的错误信息?3 4 for a in 1 2 3 5 do 6 echo$a 7#done#第7 行的必需的关键字 done 被注释掉了.8 9 exit 0 脚本脚本:missing-keyword.sh:line 10:syntax error:unexpected end of file 调试n注意错误信息中说明的错误行不必一定注意错误信息中说明的错误行不必一定要参考,但那行是要参考,但那行是 Bash 解释器最终认解释器最终认识到是个错误的地方识到是个错误的地方.4.13.2 解决脚本错误基本的错误类型有两种:

25、基本的错误类型有两种:语法错误语法错误和和逻辑错误逻辑错误。n语法错误是编写程序时违反了所用编程语言的语法错误是编写程序时违反了所用编程语言的规则而造成的。规则而造成的。n逻辑错误通常是由于程序的逻辑关系存在问题。逻辑错误通常是由于程序的逻辑关系存在问题。对此类问题需要进行程序调试。对此类问题需要进行程序调试。n一个很有用的技巧是使用一个很有用的技巧是使用setset命令打开命令打开-x-x选项,选项,或者在启动或者在启动shellshell时使用时使用-x-x选项将选项将shellshell设置成设置成跟踪模式。跟踪模式。n另一个有用的技巧是在程序中经常使用另一个有用的技巧是在程序中经常使用echoecho或或printprint命令命令 调试

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁