LINUX与UNIX SHELL编程指南019.pdf
《LINUX与UNIX SHELL编程指南019.pdf》由会员分享,可在线阅读,更多相关《LINUX与UNIX SHELL编程指南019.pdf(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下载第19章 shell 函 数本书目前为止所有脚本都是从头到尾执行。这样做很好,但你也许已经注意到有些脚本段间互相重复。s h e l l允许将一组命令集或语句形成一个可用块,这些块称为 s h e l l函数。本章内容有:定义函数。在脚本中使用函数。在函数文件中使用函数。函数举例。函数由两部分组成:函数标题。函数体。标题是函数名。函数体是函数内的命令集合。标题名应该唯一;如果不是,将会混淆结果,因为脚本在查看调用脚本前将首先搜索函数调用相应的 s h e l l。定义函数的格式为:函数名()命令1.或者函数名()命令1.两者方式都可行。如果愿意,可在函数名前加上关键字 f u n c t
2、i o n,这取决于使用者。f u n c t i o n函数名().可以将函数看作是脚本中的一段代码,但是有一个主要区别。执行函数时,它保留当前s h e l l和内存信息。此外如果执行或调用一个脚本文件中的另一段代码,将创建一个单独的s h e l l,因而去除所有原脚本中定义的存在变量。函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。函数不必包含很多语句或命令,甚至可以只包含一个 e c h o语句,这取决于使用者。19.1 在脚本中定义函数以下是一个简单函数所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至s h e l l解释器首次发现它时,才
3、可以使用。调用函数仅使用其函数名即可。上面的例子中,函数名为 h e l l o,函数体包含一个e c h o语句,反馈当天日期。19.2 在脚本中使用函数现在创建函数,观察其在脚本中的用法。运行脚本,结果为:上面例子中,函数定义于脚本顶部。可以在脚本中使用函数名 h e l l o调用它。函数执行后,控制返回函数调用的下一条语句,即反馈语句 back from the function。19.3 向函数传递参数向函数传递参数就像在一般脚本中使用特殊变量$1,$2.$9一样,函数取得所传参数后,将原始参数传回 s h e l l脚本,因此最好先在函数内重新设置变量保存所传的参数。这样如果函数有
4、一点错误,就可以通过已经本地化的变量名迅速加以跟踪。函数里调用参数(变量)的转换以下划线开始,后加变量名,如:_ F I L E N A M E或_ f i l e n a m e。19.4 从调用函数中返回当函数完成处理或希望函数基于某一测试语句返回时,可做两种处理:1)让函数正常执行到函数末尾,然后返回脚本中调用函数的控制部分。2)使用r e t u r n返回脚本中函数调用的下一条语句,可以带返回值。0为无错误,1为有错误。这是可选的,与最后状态命令报表例子极其类似。其格式为:第19章 shell 函数203下载r e t u r n从函数中返回,用最后状态命令决定返回值。Return
5、0无错误返回。Return 1有错误返回19.5 函数返回值测试可以直接在脚本调用函数语句的后面使用最后状态命令来测试函数调用的返回值。例如:更好的办法是使用i f语句测试返回0或者返回1。最好在i f语句里用括号将函数调用括起来以增加可读性。例如:如果函数将从测试结果中反馈输出,那么使用替换命令可保存结果。函数调用的替换格式为:v a r i a b l e _ n a m e=f u n c t i o n _ n a m e函数f u n c t i o n _ n a m e输出被设置到变量v a r i a b l e _ n a m e中。不久我们会接触到许多不同的函数及使用函数的
6、返回值和输出的不同方法。19.6 在shell中使用函数当你收集一些经常使用的函数时,可以将之放入函数文件中并将文件载入 s h e l l。文件头应包含语句#!/b i n/s h,文件名可任意选取,但最好与相关任务有某种实际联系。例如,f u n c t i o n s.m a i n。一旦文件载入s h e l l,就可以在命令行或脚本中调用函数。可以使用 s e t命令查看所有定义的函数。输出列表包括已经载入s h e l l的所有函数。如果要改动函数,首先用 u n s e t命令从s h e l l中删除函数,尽管u n s e t删除了函数以便于此函数对于s h e l l或脚本
7、不可利用,但并不是真正的删除。改动完毕后,再重新载入此文件。有些s h e l l会识别改动,不必使用u n s e t命令,但为了安全起见,改动函数时最好使用 u n s e t命令。19.7 创建函数文件下面创建包容函数的函数文件并将之载入 s h e l l,进行测试,再做改动,之后再重新载入。函数文件名为f u n c t i o n s.m a i n,内容如下:204第四部分 基础s h e l l编程下载上述脚本本书前面用过,现在将之转化为一个函数。这是一个基本 f i n d命令的前端。如果不加参数,函数将返回 1,即发生错误。注意错误语句中用到了实际函数名,因为这里用$0,s
8、 h e l l将只返回s h-信息,原因是文件并不是一个脚本文件。这类信息对用户帮助不大。19.8 定位文件定位文件格式为:./p a t h n a m e/f i l e n a m e现在文件已经创建好了,要将之载入 s h e l l,试键入:$.functions.main如果返回信息file not found,再试:$./functions.main此即 ,现在文件应该已载入s h e l l。如果仍有错误,则应该仔细检查是否键入了完整路径名。19.9 检查载入函数使用s e t命令确保函数已载入。s e t命令将在s h e l l中显示所有的载入函数。19.10 执行she
9、ll函数要执行函数,简单地键入函数名即可。这里是带有一个参数的 f i n d i t函数,参数是某个系统文件。第19章 shell 函数205下载19.10.1 删除shell函数现在对函数做一些改动。首先删除函数,使其对 s h e l l不可利用。使用u n s e t命令完成此功能。删除函数时u n s e t命令格式为:unset function_name$unset findit如果现在键入s e t命令,函数将不再显示。19.10.2 编辑shell函数编辑函数f u n c t i o n s.m a i n,加入f o r循环以便脚本可以从命令行中读取多个参数。改动后函数脚
10、本如下:再次定位函数$./functions.main使用s e t命令查看其是否被载入,可以发现 s h e l l正确解释f o r循环以接受所有输入参数。现在执行改动过的f i n d i t函数,输入两个参数:206第四部分 基础s h e l l编程下载19.10.3 函数举例既然已经学习了函数的基本用法,现在就用它来做一些工作。函数可以节省大量的编程时间,因为它是可重用的。1.变量输入以下脚本询问名,然后是姓。要求输入字符必须只包含字母。如果不用函数实现这一点,要写大量脚本。使用函数可以将重复脚本删去。这里用a w k语言测试字符。以下是取得只有小写或大写字符的测试函数。首先设置变
11、量$1为一有意义的名字,然后用 a w k测试整个传送记录只包含字母,此命令输出(1为非字母,空为成功)保存在变量 _ L E T T E R S _ O N LY中。然后执行变量测试,如果为空,则为成功,如果有值,则为错误。基于此项测试,返回码然后被执行。在对脚本的函数调用部分进行测试时,使用返回值会使脚本清晰易懂。使用i f语句格式测试函数功能:如果有错误,可编写一个函数将错误反馈到屏幕上。第19章 shell 函数207下载函数n a m e _ e r r o r用于显示所有无效输入错误。使用特殊变量$显示所有参数,这里为变量F _ N A M E和S _ N A M E值。完成脚本如
12、下:注意每个输入的w h i l e循环,这将确保不断提示输入直至为正确值,然后跳出循环。当然,208第四部分 基础s h e l l编程下载实际脚本拥有允许用户退出循环的选项,可使用适当的游标,正像控制 0长度域一样。2.echo问题e c h o语句的使用类型依赖于使用的系统是 L I N U X、B S D还是系统V,本书对此进行了讲解。下面创建一个函数决定使用哪种e c h o语句。使用e c h o时,提示应放在语句末尾,以等待从 r e a d命令中接受进一步输入。L I N U X和B S D为此使用e c h o命令-n选项。以下是L I N U X(B S D)e c h o
13、语句实例,这里提示放于e c h o后面:系统V使用 C保证在末尾提示:在e c h o语句开头L I N U X使用-e选项反馈控制字符。其他系统使用反斜线保证 s h e l l获知控制字符的存在。有两种方法测试e c h o语句类型,下面讲述这两种方法,这样,就可以选择使用其中一个。第一种方法是在e c h o语句里包含测试控制字符。如果键入 0 0 7和一个警铃,表明为系统V,如果只键入 0 0 7,显示为L I N U X。以下为第一个控制字符测试函数。注意这里又用到了特殊变量$以反馈字符串,要在脚本中调用上述函数,可以使用:uni_prompt 007 there goes the
14、 bell,What is your name:这将发出警报并反馈 What is your name:,并在行尾显示字符串。如果在末尾出现字符,则为系统V版本,否则为L I N U X/B S D版本。第二种方法使用系统V c测试字母z是否悬于行尾。第19章 shell 函数209下载要在脚本中调用上述函数,可以使用:uni_prompts 007 there goes the bell,What is your name:使用两个函数中任意一个,并加入一小段脚本:将产生下列输出:There goes the bell,What is your name:3.读单个字符在菜单中进行选择时,最
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINUX与UNIX SHELL编程指南019 LINUX UNIX SHELL 编程 指南 019
限制150内