2011-02-05 4 views
127
#!/bin/bash 
if [!-d /home/mlzboy/b2c2/shared/db]; then 
    mkdir -p /home/mlzboy/b2c2/shared/db; 
fi; 

이것은 작동하지 않습니다. 누구든지 도와 줄 수 있습니까? 난 당신이 다시 포맷해야 코드를 조금 생각Bash를 사용하여 폴더를 만들려면 어떻게해야합니까?

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

왜 세미콜론을 사용합니까? – ADTC

답변

18

당신은 [] 괄호 안의 공간이 필요

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

먼저, 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; 

그리고 thats.

72

실제로 존재하는지 여부를 확인할 필요가 없습니다. 만약 존재한다면 당신은 이미 그것을 만들려고하기 때문에, 단지 MKDIR은 간단하게 할

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

을 할 것입니다 : 폴더가 이미 존재하는 경우

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

에서 mkdir 오류가 발생합니다. 오류를 무시하려면 다음을 작성하십시오.

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

검사를 수행 할 필요가 없습니다.

13

클리너 방식은 쉘 논리 연산자의 바로 가기 평가를 이용합니다. 왼쪽면이 참인 경우에만 연산자의 오른쪽이 실행됩니다.

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

mmh, 클리너가 아닙니다. 그런 진술의 의미를 이해하는 것은 어렵습니다. –

+0

'-p' 인자가 체크를 불필요하게 만들지 만 나는 이것을 좋아한다. '-p'를 사용하고 싶지 않을 때, 즉 * 모든 부모 디렉토리가 자동으로 생성되기를 원하지 않을 때도 사용할 수 있습니다. – ADTC

+1

실제로'[-d/path/to/dir] ||을 쓰는 것이 더 짧습니다. mkdir/path/to/dir' .. 왼쪽면이 거짓 일 때 오른쪽이 실행됩니다. – ADTC

관련 문제