ensure_dir函数用于幂等创建目录,支持传入路径、权限模式及递归创建,具备参数校验、状态反馈与错误处理能力。

在 Linux Shell 脚本中,把「检查目录是否存在,不存在则创建」这个逻辑封装成函数,能显著提升脚本复用性与可维护性。核心不是堆命令,而是让函数具备幂等性(多次运行结果一致)、可传参、有明确状态反馈。
函数设计要点:参数灵活、权限可控、支持多级
一个实用的目录创建检查函数至少要支持:指定路径、可选权限模式、是否强制递归创建(-p)。不硬编码路径或权限,全部通过参数传入。
- 路径作为必传参数:$1 是目标目录,不能为空
- 权限模式可选:$2 若提供,用于 -m 设置(如 755),不传则用系统默认
- 递归创建默认开启:直接使用 -p,避免父目录缺失导致失败
基础封装示例(推荐写法)
以下函数名为 ensure_dir,命名直白,语义清晰:
ensure_dir() {
if [ $# -lt 1 ]; then
echo "Error: missing directory path" >&2
return 1
fi
local dir="$1"
local mode="$2"
<pre class="brush:php;toolbar:false;">if [ -d "$dir" ]; then
return 0
fi
if [ -n "$mode" ]; then
mkdir -p -m "$mode" "$dir"
else
mkdir -p "$dir"
fi
if [ $? -ne 0 ]; then
echo "Failed to create directory: $dir" >&2
return 1
fi}
调用方式简洁:
-
ensure_dir "/data/logs"—— 创建多级目录,用默认权限 -
ensure_dir "/opt/app" 750—— 指定权限为 750
增强版:带详细反馈与错误分类
适合调试或关键流程,可区分“已存在”“创建成功”“权限拒绝”等场景:
- 用
file_exists类型判断替代简单-d,兼容符号链接等边界情况(可选) - 创建失败时检查
errno对应原因(如权限不足、磁盘满),但 Shell 中通常靠mkdir自身报错 +$?判断更实际 - 加
-v开关(如用$3控制)输出日志,生产环境默认关闭,调试时启用
配合其他函数形成小工具链
单个函数价值有限,组合起来才高效。例如:
- 搭配
ensure_user(检测并创建用户)—— 先建用户,再建其家目录并设属主 - 搭配
set_owner(chown 封装)—— 创建后立即设置所有者:ensure_dir "/srv/web" 755 && chown -R www:www "/srv/web" - 在初始化脚本开头统一 source 这类函数库,主流程只写业务逻辑











