#!/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;
这似乎不起作用。有人可以帮忙吗?
;
令牌是命令分隔符,所以是换行符。作为then
单独的命令,需要前面的分号才能将其写在同一行中。mkdir
和之后的分号fi
是多余的。
Answers:
首先,在bash中,“ [”只是一个命令,它期望将字符串“]”作为最后一个参数,因此,右括号之前的空格(以及“!”和“ -d”之间的空格必须是两个单独的参数)也很重要):
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
mkdir -p /home/mlzboy/b2c2/shared/db;
fi
其次,由于您正在使用-p切换到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
不会完全忽略错误:它会调用一种不同的模式,在该模式下将创建不存在的任何路径组件(因此,如果需要创建零,这不是错误)。行为是不同的,因为它将创建除最后一个组件以外的其他组件,这可能是不希望的。
更干净的方法,利用Shell逻辑运算符的快捷方式评估。仅当左侧为true时,才执行运算符的右侧。
[ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db
-p
参数使检查变得不必要。当您不想使用时-p
,也就是您不想自动创建所有父目录时,仍可以使用它。
[ -d /path/to/dir ] || mkdir /path/to/dir
..如果左侧为false,则执行右侧。