如果文件夹不存在,如何使用 Bash 创建文件夹?

#!/bin/bash
if [!-d /home/mlzboy/b2c2/shared/db]; then
mkdir -p /home/mlzboy/b2c2/shared/db;
fi;

这好像不管用,有人能帮忙吗?

380913 次浏览

[]括号内需要空格:

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]
then
mkdir -p /home/mlzboy/b2c2/shared/db
fi

我认为你应该重新格式化一下你的代码:

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
mkdir -p /home/mlzboy/b2c2/shared/db;
fi;

首先,在Bash中[只是一个命令,它期望字符串]作为最后一个参数,因此右括号前的空白(以及!-d之间的空白,它们也需要是两个单独的参数)是重要的:

if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
mkdir -p /home/mlzboy/b2c2/shared/db;
fi

其次,由于你正在为mkdir使用-p开关,这个检查是无用的,因为这是它在第一个地方。只写:

mkdir -p /home/mlzboy/b2c2/shared/db;

就是这样。

实际上不需要检查它是否存在。既然您已经想要在它存在的情况下创建它,那么mkdir就可以了

mkdir -p /home/mlzboy/b2c2/shared/db

只是做的事:

mkdir /path/to/your/potentially/existing/folder

如果文件夹已经存在,Mkdir将抛出一个错误。要忽略错误,请写:

mkdir -p /path/to/your/potentially/existing/folder

不需要做任何检查或类似的事情。


供参考:

-p, --parents no error if existing, make parent directories as needed http://man7.org/linux/man-pages/man1/mkdir.1.html

更简洁的方式,利用shell逻辑运算符的快捷求值。只有left side为真时才执行运算符的右侧。

[ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db

在任何地方创建目录

OUTPUT_DIR =什么

if [ ! -d ${OUTPUT_DIR} ]
then
mkdir -p ${OUTPUT_DIR}
fi