最常用且稳妥的方式是用[ ! -d 目录路径 ]判断目录不存在后执行mkdir,需注意空格规范、变量加双引号,并可结合-p自动创建父目录或用||实现简洁逻辑。

直接用 [ ! -d 目录路径 ] 判断目录不存在,再执行 mkdir 创建,是最常用也最稳妥的方式。关键在于避免“目录已存在”报错,同时兼顾脚本健壮性和可读性。
基础写法:if 判断 + mkdir
适合单次操作或简单脚本:
if [ ! -d "/path/to/dir" ]; then mkdir "/path/to/dir"; fi- 如果路径含变量,记得加双引号,防止空格或特殊字符出错,例如:
if [ ! -d "$target_dir" ]; then mkdir "$target_dir"; fi - 注意:
[是 shell 内置命令,前后必须有空格;!和-d之间也要有空格
一行简洁写法:|| 操作符
利用短路逻辑,更紧凑,常用于命令行或轻量脚本:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
[ -d "/path/to/dir" ] || mkdir "/path/to/dir"- 含义是:“如果目录存在,就什么也不做;否则创建它”
- 比
if更简短,但可读性略低,不建议嵌套复杂逻辑时使用
带父目录自动创建:mkdir -p
当目标路径中上级目录可能也不存在时,必须加 -p 参数:
-
mkdir -p "/a/b/c/d"会逐级创建/a、/a/b、/a/b/c、/a/b/c/d - 配合判断使用更安全:
[ ! -d "/a/b/c/d" ] && mkdir -p "/a/b/c/d" - 单独用
mkdir -p其实也能静默处理“已存在”情况,但显式判断能让你清楚控制流程(比如后续要赋权限或写日志)
进阶建议:检查并进入目录
实际场景中,创建后往往需要立即进入,可以合并为一步:
[ ! -d "myproject" ] && mkdir "myproject"; cd "myproject"- 更严谨的写法(防止 cd 失败):
[ ! -d "myproject" ] && mkdir "myproject" && cd "myproject" || { echo "进入目录失败"; exit 1; } - 或者封装成函数复用:
mkcd() { [ ! -d "$1" ] && mkdir "$1"; cd "$1"; },之后直接mkcd logs










