Linux中自定义函数在Shell脚本或命令行中定义调用,本质是封装命令供复用;支持三种等效定义语法,需前置定义、花括号包裹;通过$1、$2等获取参数,return仅设退出状态,传数据用echo配合命令替换。

Linux 中定义和调用自定义函数,主要在 Shell 脚本或交互式命令行中完成,不涉及内核级系统调用。它本质是封装一组命令,供重复使用,语法简洁但有明确规则。
函数定义方式
Shell 函数支持三种等效写法,任选其一即可:
- 标准格式:`function name() { commands; }`
- 省略 function 关键字:`name() { commands; }`(最常用)
- 省略小括号:`function name { commands; }`
注意:函数体必须用花括号 `{}` 包裹,且左花括号前需有空格或换行;定义必须出现在调用之前,Shell 是顺序执行的,不会提前解析函数。
传参与参数获取
函数不声明参数,调用时直接传入,内部通过位置变量访问:
- `$1`、`$2` … 表示第 1、第 2 个参数;`$#` 表示参数个数;`$@` 表示全部参数列表
- 参数超过 9 个时,必须用 `${10}` 形式,不能简写为 `$10`(否则会被解释为 `$1` 后跟字符 `0`)
- 示例:
greet() { echo "Hello, $1! Today is $2."; },调用greet Alice Tuesday输出Hello, Alice! Today is Tuesday.
返回值与状态控制
函数有两种“返回”方式,用途不同:
- 命令执行结果:函数最后一条命令的退出码自动成为函数退出状态(`$?`),无需显式 return
-
显式返回值:用
return N(N 为 0–255 整数),仅影响 `$?`,不输出内容;若要传递字符串或计算结果,应使用echo+ 命令替换(如result=$(myfunc arg)) - 避免混淆:`return` 不是“返回数据”,而是设退出状态;真正传回文本或数值靠
echo和$()
调用函数的常见场景
函数可直接在脚本中调用,也可在终端会话中临时使用:
-
脚本内调用:定义后直接写函数名加参数,如
backup /home/user -
终端临时定义并调用:一行输入定义 + 一行调用,例如:
count() { echo "Count: $1"; }; count 5 -
加载到当前 shell 环境:把函数写进
~/.bashrc或单独文件(如lib.sh),再用source lib.sh导入,之后任意位置都能调用


















