macos shell 脚本函数模块化复用靠原生特性实现:用函数名() { ... }定义,local隔离变量,$1等获取参数,return返回状态码或echo配合$(...)捕获输出,通过source导入带[[ "${bash_source[0]}" == "${0}" ]]判断的独立文件(如log.sh)达成可导入亦可直接执行。
macos 的 shell 脚本(默认是 zsh,也兼容 bash)中写函数实现模块化复用,和 linux 本质一致,关键在于结构清晰、变量隔离、可导入复用。不需要额外工具,靠原生 shell 特性就能做到。
函数定义与调用要简洁规范
macOS 上推荐直接用 函数名() { ... } 形式定义,无需 function 关键字。函数体里优先用 local 声明变量,避免污染全局环境:
-
local变量只在函数内有效,比如local path="$1" - 参数通过
$1、$2等获取,$#判断个数,$@获取全部参数 - 调用时直接写函数名加空格分隔的参数,例如
backup_file "/Users/me/data.txt"
返回值按需选择合适方式
Shell 函数不能直接返回字符串,但有三种常用做法:
- 用
return n返回状态码(0 成功,1–255 失败),适合做判断逻辑,之后用$?检查 - 用
echo输出结果,调用方用$(func_name args)捕获,适合返回路径、数值、文本等 - 避免混用:不要既
return又echo,否则$?和命令替换结果容易冲突
模块化复用靠 source + 条件执行
把通用函数存成独立文件(如 utils.sh),再用 source 或 . 导入。关键是让这个文件既能被导入,也能单独运行:
macOS 微信消息自动化工具。通过 GUI 自动化实现:发送消息给指定联系人、读取聊天内容、监控新消息。适用于需要自动化微信操作的场景,如定时发送、批量回复、消息备份等。依赖 peekaboo 进行屏幕截图和 UI 交互。仅支持 macOS。开源地址:https://github.com/chairmanmia...
- 在
utils.sh底部加判断:if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then main; fi - 这样
source utils.sh时只加载函数;而./utils.sh直接运行main - macOS zsh 下同样生效,
BASH_SOURCE在 zsh 中可用(zsh 兼容该变量)
实际用法示例:一个可复用的日志函数
新建 log.sh:
#!/bin/zsh
log_info() {
local msg="$1"
echo "[$(date '+%H:%M:%S')] [INFO] $msg"
}
log_error() {
local msg="$1"
echo "[$(date '+%H:%M:%S')] [ERROR] $msg" >&2
}
<h1>仅当直接执行时运行测试</h1><p>if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
log_info "测试日志函数"
fi</p>在主脚本中使用:source ./log.sh,然后调用 log_info "开始备份" 即可。不依赖外部工具,开箱即用。










