什么是函数?

在Shell编程中,函数是一种可重用的代码块,用于执行特定的任务操作。函数可以接收参数,并可以返回一个值。函数通常用来封装一系列相关的指令或操作,以便在脚本中进行重复使用。
函数在Shell脚本中提供了以下一些优势

  1. 代码重用:使用函数可以将一组相关的指令封装起来,以便多次调用,避免重复编写相同的代码。
  2. 模块化和组织性:函数可以帮助将脚本分解为更小、更易读和更可理解的模块,使代码更具组织性和可维护性。
  3. 参数传递:函数可以接收参数作为输入,并根据参数的不同执行不同的操作。
  4. 封装与隐藏:函数可以将内部的逻辑和实现细节隐藏在函数内部,只向外部暴露函数的接口,增强了代码的可读性和安全性。

如何使用函数

函数的使用必须遵循的原则:先定义,后调用
修理工事先准备好工具的过程,即,定义函数
修理工遇到应用场景哪来工具就用即函数的调用

1.先定义
2.后调用

函数的定义

function foo() {
  cmd1
  cmd2
  cmd3
}

function foo {
  cmd1
  cmd2
  cmd3
}

foo() {
  cmd1
  cmd2
  cmd3
}

#foo指函数名:就相当于一个变量名,指向函数的内存地址

函数的调用语法

直接使用函数名即可

函数传参语法

args=$1
function foo() {
  args=$1
  cmd1
  cmd2
  cmd3
}
#举例
函数分为两个阶段:
1.调用阶段:运行函数体代码
2.定义阶段:只检测语法,不执行代码
#!/bin/bash
max (){
  x=$1
  y=$2
  if [ $x -gt $y ];then
     echo $x
  else
     echo $y
  fi
}

max

[root@zabbix01 ~]# sh foo.sh 1 2

# 传参无效,所以这里面我们需要知道,bash的参数和函数的参数不是一个

函数参数 VS 脚本参数

特殊变量 脚本 函数
$n 脚本的第N个参数 函数的第N个参数
$0 脚本名称 脚本名称
$*/$@ 脚本的所有参数 函数的所有参数
$# 脚本的所有参数 函数的所有参数

函数的返回值

函数的返回值,需要注意:
#在Python中
1.返回值没有类型限制
2.返回值没有个数限制
1)如果返回1个值:调用函拿到的结果就是一个值
2)如果返回多个值:调用函数拿到的结果就是一个元组
3)如果返回0个值:调用函数拿到的结果就是None
#在Shell中
1.函数返回值,必须是numeric,数字
## 字符串类型报错
foo.sh: line 15: return: zls: numeric argument required
## 多个返回值报错
foo.sh: line 15: return: too many arguments
#返回值的作用很重要,方便我们后续的判断,包括变量的传递,在这里说可能体现不出来,后续我们写脚本的时候用到,就明白了。