우헤헤헤헤
492
2018-09-21 13:19:24 작성 2018-09-21 13:22:59 수정됨
2
457

선배님, 간단한 쉘 스크립트 질문입니다.


안녕하세요. 쉘을 짜다가 잘 모르는 부분이 있어서 질문드립니다.

해당 경로에 디렉토리가 있는지 체크하고 없으면 만드는 쉘입니다.



ex)

if test -d /test/test

    then echo ""

else

  mkdir p- /test/test

fi


이렇게 하면 실행이 되기는 합니다.


그런데 test -d /test/test 가 참일 때, then에서 아무것도 실행을 안 합니다. 왜냐하면 디렉토리가 있기 때문입니다. 그렇다면 test -d !/test/test 이렇게 false일 경우를 체크하고 싶은데 if test 로는 할 수 있는 방법이 없는 것인가요 ?


또 디렉토리가 없으면 생성하는 쉘에서 보편적으로 if 를 쓰는지 아니면 다른 것을 쓰는지 궁금합니다. find ? ls ?

0
0
  • 답변 2

  • jjmean2
    260
    2018-09-21 13:39:28 작성 2018-09-21 13:39:43 수정됨

    저도 Shell Script는 잘 모르지만, 찾아보니 부정 연산자(negate operator)로 ! 을 쓰네요

    참고링크: how-do-i-tell-if-a-regular-file-does-not-exist-in-bash

    if test ! -d /test/test
      then mkdir -p /test/test
    fi
    

    이렇게 하면 될 듯합니다.

    참고로 찾아보니 mkdir 는 -p 옵션을 쓰면 이미 디렉토리가 존재할 경우 에러 없이 그냥 무시한다고 하네요. mkdir manual page에 나오는 옵션 -p에 대한 설명 중 일부입니다.

    On the other hand, with this option specified, no error will be reported if a directory given as an operand already exists.

    따라서 이 경우 그냥

    mkdir -p /test/test
    

    라고만 써도 원하시는 대로 동작하겠습니다.

    참고링크: how-to-mkdir-only-if-a-dir-does-not-already-exist

    0
  • bbubbu
    54
    2018-09-21 13:40:10 작성 2018-09-21 13:41:31 수정됨

    if [ -d /test/test]; then

         echo "asdasd"

    else

        mkdir -p ./tt

    fi

    이런식으로 작성하니까 /test/test 존재하면 정상적으로 asdasd에코합니다.

    아 이제보니 if에서는 then 이후에 할일이없다는 말씀이네요; 위에분처럼 쓰시면 될 것 같습니다

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.