2011-02-05 13 views

risposta

18

È necessario spazi all'interno delle parentesi [ e ]:

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

penso che si dovrebbe riformattare il codice un po ':

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

In primo luogo, in bash "[" è solo un comando, che si aspetta la stringa "]" come ultimo argomento, quindi lo spazio bianco prima della parentesi di chiusura (e tra "!" e "-d" che devono essere anche due argomenti separati) è importante:

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

In secondo luogo, dal momento che si utilizza -p passa a mkdir, questo controllo è inutile, perché questo è ciò che fa in primo luogo. Basta scrivere:

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

e questo è tutto.

72

In realtà non è necessario verificare se esiste o meno. Dal momento che si vuole già per crearlo se esiste, semplicemente mkdir farà

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

Semplicemente fare:

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

mkdir genera un errore se la cartella esiste già. Per ignorare gli errori di scrittura:

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

Non c'è bisogno di fare alcun controllo o qualcosa di simile.

13

Modo più pulito, analisi di scelta rapida degli operatori logici shell. Il lato destro dell'operatore viene eseguito solo se il lato sinistro è vero.

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

mmh, non più pulito: solo più corto. È difficile capire il significato di una tale affermazione se la si incontra. –

+0

Mi piace, anche se l'argomento '-p' rende superfluo il controllo. Puoi ancora usarlo quando non vuoi usare '-p', cioè quando * non vuoi * che tutte le directory madri vengano create automaticamente. – ADTC

+1

In realtà è ancora più breve scrivere '[-d/path/to/dir] || mkdir/path/to/dir' .. lato destro viene eseguito quando il lato sinistro è falso. – ADTC

Problemi correlati