自动化运维必须要学的Shell脚本之——函数的使用

shell函数

  • 一、函数介绍
      • 1.1 是什么的函数
      • 1.2 函数的格式
      • 1.3 函数调用的方法
      • 1.4 函数的返回值
      • 1.5 函数的传参
      • 1.6 函数变量的作用范围
      • 1.7 函数的递归
      • 1.8 递归目录
      • 1.8 创建函数库

一、函数介绍

1.1 是什么的函数

函数定义:封装的可重复利用的具有特定功能的代码
函数就是可以在shell脚本当中做出一个类似自定义执行的命令的东西,最大的功能就是简化我们很多的代码。

  • 将命令序列按照格式书写在一起
  • 可方便重复使用命令序列

1.2 函数的格式

写法一:

[function] 函数名 (){
     
	命令序列
	[return x]         #使用return或者exit可以显式的结束函数
}

写法二:

函数名(){
     
	命令序列
}

1.3 函数调用的方法

函数名  [参数1] [参数2]

案例:写一个脚本里面包括函数备份yum线上源,创建yum本地源和清理缓存安装httpd服务。
自动化运维必须要学的Shell脚本之——函数的使用_第1张图片
结果:
自动化运维必须要学的Shell脚本之——函数的使用_第2张图片

1.4 函数的返回值

return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值
使用原则:

  • 1、函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码;
  • 2、退出状态码必须是0~255,超出时值将为除以256取余。

自动化运维必须要学的Shell脚本之——函数的使用_第3张图片
结果:返回值结果超过256,会进行余256计算,然后取结果
自动化运维必须要学的Shell脚本之——函数的使用_第4张图片

案例:将函数返回值赋予变量,然后使用该变量进行计算
自动化运维必须要学的Shell脚本之——函数的使用_第5张图片
结果:

自动化运维必须要学的Shell脚本之——函数的使用_第6张图片

1.5 函数的传参

函数也是有参数的,它的内置变量与shell脚本很类似,函数名称代表示$0,而后续的变量也是以$1、$2…来替换的,这里比较容易搞混,因为函数是一个方法,我们看代码的时候直接从代码的主体部分去看,然后代码中调用了什么函数我们再去看这个函数是做什么的就不容易搞混了,以下面实验举例:

自动化运维必须要学的Shell脚本之——函数的使用_第7张图片
1.直接看代码主体部分,num1和num2分别为用户输入的两个变量的值,这里输入的是10和20;
2.然后发现调用了函数test,并传入了两个参数,第一个数为num1,也就是10,第二个数是num2,也就是20;
3.然后在函数体内,定义了变量sum等于两个参数的和,也就是10和20,10+20=30.
结果:
自动化运维必须要学的Shell脚本之——函数的使用_第8张图片

1.6 函数变量的作用范围

函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令

案例:测试变量作用域
自动化运维必须要学的Shell脚本之——函数的使用_第9张图片
测试结果:
在这里插入图片描述

1.7 函数的递归

函数调用自己本身的函数
案例:阶乘
自动化运维必须要学的Shell脚本之——函数的使用_第10张图片
结果:
自动化运维必须要学的Shell脚本之——函数的使用_第11张图片

1.8 递归目录

有点复杂,自己看…
自动化运维必须要学的Shell脚本之——函数的使用_第12张图片
结果:目录和文件会以这个形式显示出来
自动化运维必须要学的Shell脚本之——函数的使用_第13张图片

1.8 创建函数库

shell 函数库也是一个 shell 脚本,不过你可以在一个函数库中仅存储其它 shell 脚本中需要调用的函数。
创建函数库脚本文件:myfuncs.sh,在里面写入加法、减法等运算的函数
自动化运维必须要学的Shell脚本之——函数的使用_第14张图片
调用函数库内的函数,函数库的脚本文件要使用绝对路径
自动化运维必须要学的Shell脚本之——函数的使用_第15张图片

你可能感兴趣的:(Linux系统,shell,linux,运维,函数,云计算)