1. Shell函数基础概念
在Shell脚本编程中,函数是将一组命令组织在一起的可重用代码块。就像工具箱里的多功能扳手,函数让你避免重复造轮子,提高代码的可维护性和可读性。我刚开始写Shell脚本时,经常复制粘贴相同的代码段,后来发现函数才是真正的生产力工具。
函数的基本语法有两种形式:
bash复制# 传统C语言风格
function_name() {
commands
}
# 带function关键字的形式
function function_name {
commands
}
这两种写法在大多数情况下等效,但有些老版本Shell(如Bourne shell)只支持第一种。现代脚本开发中,我推荐使用第一种简洁形式,除非需要兼容特殊环境。
注意:函数名后面必须紧跟括号(),即使没有参数也要保留。花括号{}与命令之间需要有空格分隔,这是Shell的语法要求。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 函数参数与返回值处理
2.1 参数传递机制
Shell函数的参数传递方式与脚本参数类似,但有个关键区别:函数参数不是定义在函数名后的括号里,而是在调用时直接跟在函数名后面。这经常让初学者困惑,我第一次使用时也踩过这个坑。
bash复制greet() {
echo "Hello, $1!"
}
greet "World" # 输出:Hello, World!
函数内部通过$1、$2...$n访问参数,$0仍然是脚本名称。特殊参数也适用:
- $#:参数个数
- $@:所有参数(保持原样)
- $*:所有参数(合并为单个字符串)
2.2 返回值处理
Shell函数通过return语句返回退出状态码(0-255),不是像其他语言那样直接返回值。要返回数据,通常有三种方法:
- 使用全局变量(简单但不推荐)
bash复制result=""
add() {
result=$(($1 + $2))
}
add 3 5
echo $result # 输出8
- 通过命令替换捕获输出
bash复制add() {
echo $(($1 + $2))
}
sum=$(add 3 5)
- 使用命名引用(Bash 4.3+)
bash复制add() {
