오늘은 업무 중 Bash script를 사용하다가 파일 존재 유무 확인이 필요해서 file check script를 작성했는데요,
앞으로도 Bash shell 을 이용한 파일체크가 잦아질 것 같아서 따로 정리하려 합니다.
File check 하는 조건문 만들기
우선 파일의 유무를 확인하기 위해서는 아래와 같은 조건문을 사용 하면 됩니다.
211006.sh
#!/bin/bash
FILE="./test"
if [ -f "$FILE" ]; then
echo "$FILE exists."
else
echo "$FILE not found."
fi
if [[ -f "$FILE" ]]; then
echo "$FILE exists."
else
echo "$FILE not found."
fi
실행결과
$ ./211006.sh
./test not found.
./test not found.
$ touch test
$ ./211006.sh
./test exists.
./test exists.
파일 존재여부를 체크하는 과정은 아주 단순합니다. 그러면 디렉토리는 어떨까요? 앞의 스크립트를 이용해 디렉토리 유무가 체크되는지 확인해 봤습니다.
$ rm test
$ mkdir test
$ ./211006.sh
./test not found.
./test not found.
기존 touch를 이용해 만들었던 test파일을 지우고 디렉토리를 생성한 뒤 체크해 보았으나, 잘 되지 않습니다. 그럼 디렉토리는 어떻게 확인할까요?
Directory 확인하는 조건 문 만들기
디렉토리 확인을 위해서는 '-f' 가 아닌 '-d' 를 이용해 존재유무를 확인할 수 있습니다.
아래와 같이 스크립트 내용을 변경해 보았습니다.
#!/bin/bash
FILE="./test"
if [ -f "$FILE" ]; then
echo "$FILE exists."
else
echo "$FILE not found."
fi
if [[ -f "$FILE" ]]; then
echo "$FILE exists."
else
echo "$FILE not found."
fi
if [ -d "$FILE" ]; then
echo "$FILE exists."
else
echo "$FILE not found."
fi
if [[ -d "$FILE" ]]; then
echo "$FILE exists."
else
echo "$FILE not found."
fi
위의 스크립트는 기존에 파일체크를 위해 사용했던 내용, 아래는 디렉토리를 확인하기 위한 조건 문 입니다.
실행해 보면 다음과 같은 결과를 얻을 수 있습니다.
( 현재 작업 경로에는 test 파일이 아닌 디렉토리가 생성되어 있는 상황입니다.)
$ ./211006.sh
./test not found.
./test not found.
./test exists.
./test exists.
디렉토리는 '-f' 로 체크되지 않고, '-d' 로만 체크가 됩니다.
그러면 디렉토리, 파일 구분하지 않고 체크하는 방법은 없을까요?
Directory, File 구분없이 존재여부 체크하기
Directory, File 구분없이 존재 여부를 체크하기 위해서는 '-e' 를 사용해서 조건문을 구성하면 됩니다.
exist 여부를 확인하는 조건문으로 테스트를 위해 아래와 같이 스크립트를 작성 해 줍니다.
FILE="./f_test"
DIR="./d_test"
if [ -e "$FILE" ]; then
echo "$FILE exists."
else
echo "$FILE not found."
fi
if [[ -e "$FILE" ]]; then
echo "$FILE exists."
else
echo "$FILE not found."
fi
if [ -e "$DIR" ]; then
echo "$DIR exists."
else
echo "$DIR not found."
fi
if [[ -e "$DIR" ]]; then
echo "$DIR exists."
else
echo "$DIR not found."
fi
실행하면 아래와 같은 결과를 얻을 수 있습니다.
현재 작업 경로에는 f_test 파일과 d_test 디렉토리가 있는 상태입니다.
$ ./211006.sh
./f_test exists.
./f_test exists.
./d_test exists.
./d_test exists.
위에 작성 된 세가지 유형의 조건문만 작성 가능하다면, 파일의 존재유무를 체크해서 일련의 작업을 수행하는데 전혀 문제가 없을 것이라 생각이 됩니다.
끝.
'CS > Shell scripts' 카테고리의 다른 글
[쉘스크립트/csh] Linux csh 에서 파일 유무 확인하는 방법 / 일반 파일 존재 확인 / 파일 있는지 확인하는 조건 문 작성 (0) | 2022.02.14 |
---|---|
[오늘의 업무/Bash] Shell 문자열에서 원하는 부분만 치환/변경 하는 방법 (0) | 2021.10.07 |
[bash] 스크립트 에서 signal 캐치하는 방법 (0) | 2021.08.01 |
[Bash] Bash 스크립트에서 argument로 Option 을 처리 하는 방법 (0) | 2021.07.08 |
[Bash] 쉘 스크립트 출력 시 개행이 안되는 경우 해결방법 (0) | 2021.06.24 |