首先,在 Bash 中 [
只是一个命令,它需要字符串 ]
作为最后一个参数,因此右括号之前的空格(以及 !
和 -d
之间的空格也需要是两个单独的参数) 是重要的:
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
mkdir -p /home/mlzboy/b2c2/shared/db;
fi
其次,由于您为 mkdir
使用 -p
开关,因此此检查是无用的,因为它首先是 does。写吧:
mkdir -p /home/mlzboy/b2c2/shared/db;
就是这样。
实际上没有必要检查它是否存在。由于您已经想创建它(如果它存在),只需 mkdir 即可
mkdir -p /home/mlzboy/b2c2/shared/db
-p
标志会导致创建任何父目录。
只需这样做:
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
-p
并没有完全忽略错误:它调用了一种不同的模式,其中创建了任何不存在的路径组件(因此,如果发生需要创建零的情况,这不是错误)。行为是不同的,因为它将创建除最后一个之外的组件,这可能是可取的,也可能不是。
[
和 ]
括号内需要空格:
#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]
then
mkdir -p /home/mlzboy/b2c2/shared/db
fi
更简洁的方式,利用 shell 逻辑运算符的快捷评估。仅当左侧为真时,才执行运算符的右侧。
[ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db
-p
参数使检查变得不必要。当您不想使用 -p
时,您仍然可以使用它,即当您不想自动创建所有父目录时。
[ -d /path/to/dir ] || mkdir /path/to/dir
更短。当左侧为假时,右侧执行。
我认为你应该重新格式化你的代码:
#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
mkdir -p /home/mlzboy/b2c2/shared/db;
fi;
在任何地方创建目录
OUTPUT_DIR=随便
if [ ! -d ${OUTPUT_DIR} ]
then
mkdir -p ${OUTPUT_DIR}
fi
不定期副业成功案例分享
-p
标志会导致创建任何父目录。