#!/bin/bash
if [!-d /home/mlzboy/b2c2/shared/db]; then
mkdir -p /home/mlzboy/b2c2/shared/db;
fi;
This doesn't seem to work. Can anyone help?
;
token is a command separator, so is newline. As then
is a separate command, the preceding semicolon is needed to be be able to write it in the same line. The semicolons after mkdir
and fi
are superflous.
First, in Bash [
is just a command, which expects string ]
as a last argument, so the whitespace before the closing bracket (as well as between !
and -d
which need to be two separate arguments too) is important:
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
mkdir -p /home/mlzboy/b2c2/shared/db;
fi
Second, since you are using -p
switch for mkdir
, this check is useless, because this is what it does in the first place. Just write:
mkdir -p /home/mlzboy/b2c2/shared/db;
and that's it.
There is actually no need to check whether it exists or not. Since you already wants to create it if it exists , just mkdir will do
mkdir -p /home/mlzboy/b2c2/shared/db
-p
flag causes any parent directories to be created if necessary.
Simply do:
mkdir /path/to/your/potentially/existing/folder
mkdir will throw an error if the folder already exists. To ignore the errors write:
mkdir -p /path/to/your/potentially/existing/folder
No need to do any checking or anything like that.
For reference:
-p, --parents no error if existing, make parent directories as needed
http://man7.org/linux/man-pages/man1/mkdir.1.html
-p
doesn't exactly ignore errors: it invokes a different mode where any path components that don't exist are created (and hence it is not an error if happens that zero need to be created). The behavior is different since it will create components other than the last one, which may or not be desirable.
You need spaces inside the [
and ]
brackets:
#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]
then
mkdir -p /home/mlzboy/b2c2/shared/db
fi
Cleaner way, exploit shortcut evaluation of shell logical operators. Right side of the operator is executed only if left side is true.
[ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db
-p
argument makes the check unnecessary. You can still use it when you don't want to use -p
, that is when you don't want all the parent directories to be created automatically.
[ -d /path/to/dir ] || mkdir /path/to/dir
.. right side is executed when the left side is false.
I think you should re-format your code a bit:
#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
mkdir -p /home/mlzboy/b2c2/shared/db;
fi;
Create your directory wherever
OUTPUT_DIR=whatever
if [ ! -d ${OUTPUT_DIR} ]
then
mkdir -p ${OUTPUT_DIR}
fi
Success story sharing
-p
flag causes any parent directories to be created if necessary.