Linux自动化运维(Shell与Ansible)(微课版) 课件 4-2 创建和使用函数_第1页
Linux自动化运维(Shell与Ansible)(微课版) 课件 4-2 创建和使用函数_第2页
Linux自动化运维(Shell与Ansible)(微课版) 课件 4-2 创建和使用函数_第3页
Linux自动化运维(Shell与Ansible)(微课版) 课件 4-2 创建和使用函数_第4页
Linux自动化运维(Shell与Ansible)(微课版) 课件 4-2 创建和使用函数_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Shell数组与函数任务2:创建和使用函数目录/Contents01020304定义和调用函数函数参数函数返回值变量作用域01定义和调用函数定义和调用函数函数是计算机编程中的一个重要概念,几乎所有的编程语言都支持函数。函数提供一种结构化的方式来组织和重用代码,可以将一段逻辑相关的代码封装在一个函数中,并在需要的时候进行调用。在Shell中,可自定义函数并在脚本中调用,通过参数传递和返回值处理来实现复杂的逻辑处理,以降低代码的重复性,提高代码的可读性和可维护性在Shell中定义函数的基本语法如下:#方式1function_name(){#函数体}#方式2functionfunction_name{#函数体

#returnvalue}#function_name表示函数名,函数名不能以数字开头,可以包含字母、数字和下画线。#函数体位于花括号内,可以包含任意数量的命令和语句以及可选的参数。#value表示函数的返回值,函数的返回值可以使用return语句指定,如果未指定返回值,则默认返回最后一个命令的退出状态码。定义和调用函数定义简单的函数,用于输出当前日期和时间。print_datetime(){echo"Thecurrentdateandtimeare:$(date)"}定义函数后,可以在脚本中使用函数名来调用函数,也可以给函数传递参数。调用函数的语法如下:function_name#其中,function_name表示要调用的函数的名称,arguments表示传递给函数的参数,这些参数可以是位置参数或关键字参数。在Shell脚本中调用函数,输出当前日期和时间。print_datetime(){echo"Thecurrentdateandtimeare:$(date)"}print_datetime02函数参数位置参数在执行函数时,函数可以接收输入参数并执行相应的操作,这些参数可以是位置参数或关键字参数。位置参数是指在函数调用时按照参数的位置顺序传递给函数的值,这些参数按照在命令行中出现的顺序从1开始依次编号。在函数体内部,位置参数可以通过$1,$2,$3,...,$n的形式来引用,其中$1表示第一个参数,$2表示第二个参数,以此类推,$n表示第n个参数。调用函数并指定传递的参数值时,这些参数值会自动赋给位置参数。常见的位置参数如下表所示。序号参数描述1$0表示当前脚本或函数的名称2$@表示所有位置参数的列表,将每个位置参数作为独立的字符串返回3$#表示位置参数的个数,即传递给函数的参数数量4$*表示所有位置参数的列表,将所有位置参数作为一个字符串返回5$?用于获取上一个命令或函数的退出状态码(返回值)。它表示上一个命令或函数的执行结果位置参数在函数中输出不同位置参数的示例如下:#!/bin/bashfunctionfoo(){echo"Thescriptnameis:$0"echo"Thefirstargumentis:$1"echo"Thesecondargumentis:$2"echo"Thenumberofargumentsis:$#"echo"Allargumentsasasingleword:$*"echo"Allargumentsasseparatewords:$@"}fooarg1arg2arg3#执行脚本bashfunc-para.sh脚本定义了一个名为foo的函数,该函数使用了一些特殊的Shell参数来处理脚本和函数的输入参数。它通过调用foo函数并传递arg1arg2arg3作为参数来展示这些特殊参数的使用。$0是特殊参数,代表当前执行的脚本的名字。在函数内部,它仍然代表脚本名,而不是函数名。$1是传递给函数或脚本的第一个参数,在这个脚本的上下文中,它将是arg1。$2代表传递给函数或脚本的第二个参数,这里为arg2。$#代表传递给函数的参数个数。在这个脚本中,由于传递给foo的参数有三个,$#将会是3。$*将所有传递给函数的参数视为一个整体,参数之间默认由空格分隔。如果要将所有参数视为一个单一字符串,经常会用到"$*"。$@与$*不同的是,$@会将每个参数作为独立的引用字符串处理。在脚本中经常用于循环遍历所有参数,特别是当参数本身可能包含空格时。位置参数在函数中使用位置参数来计算两个数的和,具体示例如下:#定义一个函数,计算两个数的和sum(){localnum1=$1#使用第一个位置参数localnum2=$2#使用第二个位置参数localresult=$((num1+num2))echo"Thesumof$num1and$num2is:$result"}#调用函数,并传递位置参数sum1020上述示例中,定义了一个名为sum的函数,它接收两个位置参数$1和$2。在函数体内部,将位置参数的值分别赋给num1和num2变量,并使用$((num1+num2))表达式进行加法运算,得到和result。最后通过调用sum函数来执行加法运算,在函数调用中,按照顺序传递参数10和20,这些参数将作为位置参数传递给函数。关键字参数关键字参数是指在函数调用时使用关键字-值对的形式传递给函数的参数。使用关键字参数,可以明确指定参数的名称,而不依赖于参数的位置顺序。在函数体内部,可以使用${parameter_name}的形式来访问传递的关键字参数。调用函数时,使用parameter_name=value的形式来给函数传递参数。其中,函数print_info接收关键字参数name、age和country。在函数内部,通过for语句将关键字参数传递给函数的参数列表$@,使用case语句对参数进行解析。函数参数#!/bin/bashfunctionprint_info(){localname=""localage=""localcountry=""

forargin"$@";docase$arginname=*)name=${arg#*=};;age=*)age=${arg#*=};;country=*)country=${arg#*=};;esacdone

echo"Name:$name,Age:$age,Country:$country"}print_infoname=Johnage=30country=USA在函数中使用关键字参数来输出给定信息,具体示例如下:脚本中的print_info函数接收三个模拟的关键字参数:name、age和country。在函数内部,使用for循环遍历函数参数列表$@。对于每个参数,使用case语句和参数扩展来提取关键字后的值。通过移除等号=及其前面的部分来实现(${arg#*=}),保留参数值。最后,函数打印出提取的参数值。03函数返回值函数返回值在Shell脚本中,函数可以通过return语句返回一个值,返回值可以是整数,取值范围为0~255。返回值用于表示函数执行的状态或结果,并可以在函数调用时进行处理或判断。当调用函数并接收其返回值时,$?变量保存了上一个命令或函数的退出状态码,可以使用$?变量来获取函数的返回值。functionmy_func(){localresult="hello"return42}my_funcecho"my_funcreturned$?"#执行脚本,输出结果my_funcreturned42函数返回值函数的返回值默认是整数,如果需要返回其他类型的值,如字符串或其他数据,可使用echo命令将值输出到标准输出中,然后在调用函数时使用命令替换来获取返回值。在上述示例中,my_func函数将字符串hello输出到标准输出中,然后在调用my_func时使用命令替换将输出的字符串赋给变量result,最终输出的结果为my_funcreturnedhello。functionmy_func(){localresult="hello"echo"$result"}result=$(my_func)echo"my_funcreturned$result"#执行脚本,输出结果my_funcreturnedhello04变量作用域变量作用域变量作用域指的是变量可以被访问的范围。在Shell函数中,变量分为全局变量和局部变量,全局变量在脚本的任何地方都可以访问,而局部变量仅在函数内部可访问。默认情况下,在函数内部可以直接访问和使用函数外部定义的变量,而无须使用特殊的关键字,这样的行为可能导致变量混淆和数据错误修改。为了避免这种情况,可以使用local或者declare关键字来声明局部变量,使其仅在当前函数内部有效,不会影响外部同名变量的值。在函数内部使用local关键字声明的变量,只在该函数内部有效,函数外部无法访问该变量。使用local关键字声明局部变量:function_name(){localvariable_name=value#函数内部代码块}变量作用域使用declare关键字声明的变量,如果是在函数内部声明的,则为局部变量,只在该函数内部有效;如果是在函数外部声明的,则为全局变量,在整个脚本中有效。使用declare关键字声明局部变量:注意:定义函数不会导致函数被执行,在没有主动调用函数时,无论是全局变量还是局部变量,都不能在函数外部和内部调用。function_name(){declarevariable_name=value#函数内部代码块}变量作用域全局变量和使用local声明的局部变量的作用域,具体示例如下:#!/bin/bash#全局变量global_variable="Global"functionmy_function(){#局部变量

locallocal_variable="Local"echo"Insidefunction:$local_variable"echo"Insidefunction:$global_variable"}echo"Outsidefunction:$local_variable"echo"Outsidefunction:$global_variable"#调用函数my_function#执行脚本,输出结果Outsidefunction:Outsidefunction:GlobalInsidefunction:LocalInsidefunction:Globa全局变量global_variable被设置为字符串"Global"。在脚本中任何地方都是可见的。定义了一个名为my_function的函数,在这个函数内部声明了一个局部变量local_variable,被设置为字符串"Local"。局部变量只在函数内部可见。函数内部使用echo命令打印局部变量local_variable和全局变量global_variable的值。在函数外部也使用echo尝试打印这两个变量的值。由于local_variable是局部变量,它在函数外部不可见,所以打印为空。而全局变量global_variable在任何地方都可见,因此它的值"Global"被打印出来。在脚本的末尾调用了my_function函数,脚本输出函数内外对变量的打印结果。变量作用域全局变量和使用declare声明的局部变量的作用域,具体示例如下:global_var="GlobalVariable"modify_variable(){declare-llocal_var="LOWercase"echo"Insidethefunction:"echo"Globalvariable:$global_var"echo"Localvariable:$local_var"}modify_variableecho"Outsidethefunction:"echo"Globalvariable:$global_var"echo"Localvariable:$local_var"#执行脚本,输出结果Insidethefunction:Globalvariable:GlobalVariableLocalvariable:lowercaseOutsidethefunction:Globalvariable:GlobalVariableLocalvariable:global_var是一个全局变量,赋值为"GlobalVariable"。全局变量在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论