2011-02-05 5 views

Odpowiedz

18

Trzeba przestrzenie wewnątrz nawiasów [ i ]:

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

myślę, że należy ponownie sformatować Kod trochę:

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

pierwszy, w bash "[" jest po prostu polecenie, które oczekuje ciągu "]" jako ostatniego argumentu, dlatego ważne są białe spacje przed nawiasem zamykającym (jak również między "!" i "-d", które również muszą być dwoma oddzielnymi argumentami):

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

Po drugie, ponieważ używasz przełącznika -p na mkdir, kontrola ta jest bezużyteczna, ponieważ tak właśnie jest. Po prostu napisz:

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

i to wszystko.

72

W rzeczywistości nie ma potrzeby sprawdzania, czy istnieje. Skoro już chce go utworzyć, jeśli istnieje, to będzie mkdir zrobić

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

Wystarczy zrobić:

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

mkdir wygeneruje błąd, jeśli folder już istnieje. Aby zignorować błędy, napisz:

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

Nie trzeba robić żadnych kontroli ani nic w tym stylu.

13

Czystszy sposób, wykorzystaj ocenę skrótów operatorów logicznych powłoki. Prawa strona operatora jest wykonywana tylko wtedy, gdy lewa strona jest prawdziwa.

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

mmh, nie czystszy: tylko krótszy. Trudno zrozumieć znaczenie takiego stwierdzenia, jeśli natkniesz się na to. –

+0

Podoba mi się to, chociaż argument '-p' sprawia, że ​​sprawdzenie nie jest konieczne. Nadal możesz z niego korzystać, jeśli nie chcesz używać '-p', to znaczy, gdy * nie chcesz * aby wszystkie katalogi nadrzędne były tworzone automatycznie. – ADTC

+1

Właściwie to jest jeszcze krótsze, aby napisać '[-d/path/to/dir] || mkdir/path/to/dir' .. right side jest wykonywany, gdy lewa strona jest fałszywa. – ADTC