shell(7)函数

Shell 函数介绍

在 shell 脚本中,函数是一段可重用的代码块,用于封装特定的功能。使用函数可以提高代码的可读性、模块化和维护性。shell 函数类似于其他编程语言中的函数,可以接收参数、执行操作并返回结果。

定义方式

  1. function 关键字

    1
    2
    3
    4
    5
    6
    function 函数名() {
    # 函数体

    # 返回值
    [ return int ]
    }
  2. 不带 function 关键字

    1
    2
    3
    4
    5
    6
    7
    函数名() {
    # 函数体

    # 返回值
    [ return int ] //退出函数
    exit int //退出脚本
    }

加载函数

函数文件在一个文件夹下,可以通过source xxx.sh / . xxx.sh。然后同步函数名字调用函数。

特点

  • 参数传递:通过 $1, $2, … 访问传入的参数,$# 表示参数个数,$@$* 表示所有参数。
  • 返回值:可以用 return 返回状态码(0 表示成功,非 0 表示失败),或通过 echo 输出结果。($? 获取函数返回值)
  • 作用域:默认变量是全局的,使用 local 关键字可以定义局部变量。
  • 调用:直接使用函数名调用,不需要额外的语法。

示例

这里是一个简单的 shell 函数示例:

1
2
3
4
5
6
7
8
#!/bin/bash

greet() {
echo "Hello, $1!"
}

# 调用函数并传递参数
greet "World"

运行结果:Hello, World!

关键点

  • 参数:函数可以通过 $1, $2, … 来访问传入的参数,$1 是第一个参数,$2 是第二个,以此类推。
  • 返回值:可以用 return 返回一个退出状态码(0-255),或者通过 echo 输出结果并用变量捕获。
  • 调用:直接写函数名即可调用,比如 greet

更复杂的例子

1
2
3
4
5
6
7
8
9
#!/bin/bash

add() {
local sum=$(( $1 + $2 )) # local 关键字使变量作用域限制在函数内
echo "Sum is: $sum"
}

result=$(add 3 5)
echo $result

运行结果:Sum is: 8

使用场景

  1. 代码复用:避免重复编写相同的逻辑。
  2. 模块化:将复杂脚本拆分为多个小函数,便于调试和维护。
  3. 参数化操作:通过参数动态处理不同的输入。