Bash에 파일이나 디렉터리가 있는지 확인하는 방법

青灯夜游
풀어 주다: 2019-03-22 16:33:49
원래의
4850명이 탐색했습니다.

셸 스크립트를 작성할 때 파일 존재 여부에 따라 작업을 수행해야 하는 경우가 많습니다. 그렇다면 파일이 존재하는지 확인하는 방법은 무엇입니까? 다음 기사에서는 테스트 명령을 사용하여 Bash에 파일이나 디렉터리가 있는지 확인하는 방법을 보여줍니다. 도움이 되기를 바랍니다.

Bash에 파일이나 디렉터리가 있는지 확인하는 방법

test command

Bash에서는 test 명령을 사용하여 파일이 존재하는지 확인하고 파일 유형을 확인할 수 있습니다.

test 명령은 다음 구문 형식 중 하나를 사용합니다.

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
로그인 후 복사

스크립트를 이식 가능하게 하려면 모든 POSIX 셸에서 사용할 수 있는 이전 test [ 명령을 사용하는 것이 좋습니다. 테스트 명령 [[(이중 괄호)의 새로운 업그레이드 버전은 bash, zsh 및 ksh를 기본 셸로 사용하는 대부분의 최신 시스템에서 지원됩니다.

테스트 명령의 파일 연산자

테스트 명령에는 다음과 같은 파일 연산자가 포함되어 있어 특정 유형의 파일을 테스트할 수 있습니다.

 ●  -b FILE : FILE이 존재하고 블록 특수 파일인 경우 True입니다.

 ● -c FILE: FILE이 존재하고 특수 문자 파일이면 True입니다.

 ● -d FILE: FILE이 존재하고 디렉터리이면 참입니다.

●  -e FILE : 유형(노드, 디렉터리, 소켓 등)에 관계없이 FILE이 존재하고 파일이면 참입니다.

 ● -f FILE : FILE이 존재하고 일반 파일(디렉토리나 장치가 아님)이면 True입니다.

 ● -G FILE: FILE이 존재하고 명령을 실행하는 사용자와 동일한 그룹에 있으면 참입니다.

 ● -h FILE: FILE이 존재하고 심볼릭 링크이면 참입니다.

 ● -g FILE: FILE이 존재하고 set-group-id(sgid) 플래그가 설정되어 있으면 참입니다.

 ●  -k FILE: FILE이 존재하고 고정 비트 플래그가 설정되어 있으면 참입니다.

 ● -L FILE: FILE이 존재하고 심볼릭 링크이면 참입니다.

 ●  -O FILE : FILE이 존재하고 명령을 실행하는 사용자가 소유한 경우 참입니다.

 ● -p FILE: FILE이 존재하고 파이프이면 참입니다.

 ● -r FILE: FILE이 존재하고 읽을 수 있으면 참입니다.

 ● -S FILE: FILE이 존재하고 소켓이면 참입니다.

 ● -s FILE: FILE이 존재하고 크기가 0이 아닌 경우 참입니다.

 ● -u 파일: 존재하고 set-user-id(suid) 플래그가 설정되어 있으면 참입니다.

 ● -w FILE: FILE이 존재하고 쓰기 가능하면 참입니다.

 ● -x FILE: FILE이 존재하고 실행 가능하면 참입니다.

파일이 있는지 확인하는 방법은 무엇인가요?

파일이 있는지 확인할 때 가장 일반적으로 사용되는 FILE 연산자는 -e와 -f입니다. 첫 번째 연산자는 파일 유형에 관계없이 파일이 존재하는지 확인합니다. 두 번째 연산자는 파일이 일반 파일(디렉토리나 장치가 아님)인 경우에만 true를 반환합니다.

파일이 있는지 확인할 때 가장 읽기 쉬운 옵션은 if 문과 함께 test 명령을 사용하는 것입니다. 다음 스니펫은 /etc/resolv.conf 파일이 있는지 확인합니다.

FILE=/etc/resolv.conf
if test -f "$FILE"; then
    echo "$FILE exist"
fi
로그인 후 복사
FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exist"
fi
로그인 후 복사
FILE=/etc/resolv.conf
if [[ -f "$FILE" ]]; then
    echo "$FILE exist"
fi
로그인 후 복사

파일 존재 여부에 따라 다른 작업을 수행하려면 if/then 구조를 사용하세요.

FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exist"
else 
    echo "$FILE does not exist"
fi
로그인 후 복사

참고: 핸들 이름에 문제를 방지하려면 파일에 공백이 포함된 경우 항상 큰따옴표를 사용하십시오.

if 문 없이 테스트 명령을 사용할 수도 있습니다. && 연산자 뒤의 명령은 테스트 명령의 종료 상태가 true인 경우에만 실행됩니다.

test -f /etc/resolv.conf && echo "$FILE exist"
로그인 후 복사
[ -f /etc/resolv.conf ] && echo "$FILE exist"
로그인 후 복사
[[ -f /etc/resolv.conf ] && echo "$FILE exist"
로그인 후 복사

&& 연산자 뒤에 일련의 명령을 실행하려면 명령을 ";" 또는 "&&"로 묶으세요. 중괄호로 구분됩니다.

[ -f /etc/resolv.conf ] && { echo "$FILE exist"; cp "$FILE" /tmp/; }
로그인 후 복사

&와 달리 || 연산자 뒤에 오는 명령문은 테스트 명령의 종료 상태가 false인 경우에만 실행됩니다.

[ -f /etc/resolv.conf ] && echo "$FILE exist" || echo "$FILE does not exist"
로그인 후 복사

디렉토리가 있는지 확인하는 방법은 무엇인가요?

-d 연산자를 사용하면 파일이 디렉터리인지 테스트할 수 있습니다.

예를 들어 /etc/docker 디렉토리가 있는지 확인하려면 다음을 사용해야 합니다.

FILE=/etc/docker
if [ -d "$FILE" ]; then
    echo "$FILE is a directory"
fi
로그인 후 복사
[ -d /etc/docker ] && echo "$FILE is a directory"
로그인 후 복사

마찬가지로 단일 괄호 [[ 대신 이중 괄호 [[를 사용할 수도 있습니다.

파일이 존재하지 않는지 어떻게 확인하나요?

다른 많은 언어와 유사하게 작동합니다! (느낌표) 테스트 표현식을 부정하는 논리적 NOT 연산자:

FILE=/etc/docker
if [ ! -f "$FILE" ]; then
    echo "$FILE exist and it is a directory"
fi
로그인 후 복사

위와 동일:

[ ! -f /etc/docker ] || echo "$FILE does not exist"
로그인 후 복사

파일이 여러 개 있는지 확인하는 방법은 무엇입니까?

여러 파일이 있는 경우 복잡한 중첩 if/else 구문을 사용하는 대신 -a(또는 &&with[])를 사용하여 테스트할 수 있습니다.

FILE=/etc/docker
if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then
    echo "$FILE is a directory"
fi
로그인 후 복사
FILE=/etc/docker
if [ -f /etc/resolv.conf && -f /etc/hosts ]; then
    echo "$FILE is a directory"
fi
로그인 후 복사

IF 문을 사용하지 않는 동등한 변형:

[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "both files exist"
로그인 후 복사
[[ -f /etc/resolv.conf && -f /etc/hosts ]] && echo "both files exist"
로그인 후 복사

권장 비디오 튜토리얼: "Linux Tutorial"

위 내용은 이 글의 전체 내용입니다. 모든 사람의 학습에 도움이 되기를 바랍니다. 더 흥미로운 내용을 보려면 PHP 중국어 웹사이트의 관련 튜토리얼 열을 주의 깊게 살펴보세요! ! !

위 내용은 Bash에 파일이나 디렉터리가 있는지 확인하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿