[toc]

函数介绍

什么是函数

函数就是具备某一功能的工具

为什么要使用函数

如果不使用函数,那么你的代码:
1.程序的组织结构不清晰,可读性差
2.代码冗余
3.可扩展性差

如何使用函数

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

函数的语法

函数参数 和脚本参数的区别

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

函数定义语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 定义方式一
function foo() {
cmd1
cmd2
cmd3
}

# 定义方式二
function foo {
cmd1
cmd2
cmd3
}

# 定义方式三
foo() {
cmd1
cmd2
cmd3
}

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

# 注意
当前函数中禁止调用当前函数,否则会无限循环,直到死机

函数的调用语法

直接使用函数名即可

函数传参语法

1
2
3
4
5
6
function foo() {
args=$1
cmd1
cmd2
cmd3
}

错误举例

函数分为两个阶段:
1.调用阶段:运行函数体代码
2.定义阶段:只检测语法,不执行代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 编辑脚本
#!/bin/bash
max (){
x=$1
y=$2
if [ $x -gt $y ];then
echo $x
else
echo $y
fi
}

max

# 运行脚本
sh foo.sh 1 2

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

函数的返回值

  1. 在Shell中函数返回值,必须是numeric,数字
1
2
# 字符串类型报错
foo.sh: line 15: return: zls: numeric argument required
  1. 返回值有个数限制,只能写一个返回值

    1
    2
    # 多个返回值报错
    foo.sh: line 15: return: too many arguments

返回值的作用很重要,方便我们后续的判断,包括变量的传递,在这里说可能体现不出来,后续我们写脚本的时候用到,就明白了。