#!/bin/bash
if [!-d /home/mlzboy/b2c2/shared/db]; then
mkdir -p /home/mlzboy/b2c2/shared/db;
fi;
Esto no parece funcionar. ¿Alguien puede ayudar?
Primero, en bash "[" es solo un comando, que espera la cadena "]" como último argumento, entonces el espacio en blanco antes del corchete de cierre (así como entre "!" Y "-d" que deben ser dos argumentos separados también) es importante:
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
mkdir -p /home/mlzboy/b2c2/shared/db;
fi
En segundo lugar, dado que está utilizando -p cambiar a mkdir
, esta comprobación es inútil, porque esto es lo que hace en primer lugar. Solo escribe:
mkdir -p /home/mlzboy/b2c2/shared/db;
y eso es.
-p
bandera hace que se creen directorios principales si es necesario.
En realidad no hay necesidad de verificar si existe o no. Como ya desea crearlo si existe, solo mkdir lo hará
mkdir -p /home/mlzboy/b2c2/shared/db
-p
bandera hace que se creen directorios principales si es necesario.
Simplemente haz:
mkdir /path/to/your/potentially/existing/folder
mkdir arrojará un error si la carpeta ya existe. Para ignorar los errores, escriba:
mkdir -p /path/to/your/potentially/existing/folder
No es necesario hacer ninguna comprobación ni nada por el estilo.
Para referencia:
-p, --parents no error if existing, make parent directories as needed
http://man7.org/linux/man-pages/man1/mkdir.1.html
-p
no ignora exactamente los errores: invoca un modo diferente donde se crean los componentes de ruta que no existen (y, por lo tanto, no es un error si sucede que es necesario crear cero). El comportamiento es diferente ya que creará componentes distintos al último, que pueden ser o no deseables.
Es necesario espacios dentro de las [
y ]
los soportes:
#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]
then
mkdir -p /home/mlzboy/b2c2/shared/db
fi
De forma más limpia, explote la evaluación de acceso directo de los operadores lógicos de shell. El lado derecho del operador se ejecuta solo si el lado izquierdo es verdadero.
[ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db
-p
argumento hace innecesario el cheque. Todavía puede usarlo cuando no lo desee -p
, es decir, cuando no desee que todos los directorios principales se creen automáticamente.
[ -d /path/to/dir ] || mkdir /path/to/dir
... el lado derecho se ejecuta cuando el lado izquierdo es falso.
Creo que deberías volver a formatear un poco tu código:
#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
mkdir -p /home/mlzboy/b2c2/shared/db;
fi;
;
token es un separador de comandos, al igual que la nueva línea. Comothen
es un comando separado, se necesita el punto y coma anterior para poder escribirlo en la misma línea. Los puntomkdir
y coma después yfi
son superflores.