대부분의 경우 파일이 존재하는지 여부를 확인하는 작업을 수행해야 하는 상황을 찾을 수 있습니다.
Bash에서는 '테스트 명령'을 사용하여 파일이 존재하는지 확인하고 파일 유형을 결정할 수 있습니다.
다음은 테스트 명령의 구문이며 다음 명령 중 하나를 사용할 수 있습니다.
test expression [ expression ] [[ expression ]]
모든 POSIX 쉘에 대해 스크립트를 이식 가능하게 만들려면 단일 대괄호 '[' 명령을 사용해야 합니다. 업그레이드된 버전의 test 명령에는 Bash, Zsh 및 Ksh를 기본 셸로 사용하는 대부분의 최신 시스템에서 지원되는 이중 대괄호 '[['가 포함되어 있습니다.
파일이 존재하는지 확인
파일이 존재하는지 확인할 때 가장 일반적으로 사용되는 파일 연산자는 -e 및 -f입니다. '-e' 옵션은 종류에 관계없이 파일이 존재하는지 확인하는 데 사용되며, '-f' 옵션은 파일이 일반 파일(디렉토리나 장치가 아닌)인 경우에만 참값을 반환하는 데 사용된다.
파일이 존재하는지 여부를 확인하는 가장 일반적인 옵션은 'if 조건문'과 함께 test 명령을 사용하는 것입니다.
'read_file.txt' 파일이 존재하는지 확인하는 예는 다음과 같습니다.
방법 1
#!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi
방법 2
#!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi
방법 3
#!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi
산출
디렉터리에 파일(read_file.txt)이 있으므로 세 가지 방법 모두에 대한 출력은 다음과 같습니다.
mysql 사용자 생성
read_file.txt exist
파일이 존재하는지 여부에 따라 결과를 제공하는 작업을 수행하려면 다음과 같은 방법으로 if/then 구성을 사용할 수 있습니다.
예
#!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi
산출
read_file.txt exist
if 문 없이 test 명령을 사용할 수도 있습니다. 다음 방법 중 하나를 사용할 수 있습니다.
방법 1
#!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist'
방법 2
#!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist'
방법 3
#!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist'
산출
디렉터리에 파일(read_file.txt)이 있으므로 세 가지 방법 모두에 대한 출력은 다음과 같습니다.
read_file.txt exist
&& 연산자 뒤에 실행할 명령이 여러 개 있는 경우 세미콜론(;) 또는 AND(&&)로 구분된 중괄호로 명령을 묶습니다. 즉, 다음과 같습니다.
예
#!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; }
&&와 달리 || 테스트 명령의 종료 상태가 'false'인 경우에만 연산자가 실행됩니다.
예
#!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist'
산출
read_file.txt exist
Bash에서 파일이 존재하는지 여부를 확인하기 위해 일반적으로 사용되는 방법입니다.
디렉토리가 존재하는지 확인
'-d' 연산자를 사용하면 파일이 디렉터리인지 여부를 테스트할 수 있습니다.
'Javatpoint' 디렉터리가 존재하는지 확인하는 방법은 다음과 같습니다.
방법 1
#!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi
방법 2
#!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory'
메모:단일 대괄호 '[' 대신 이중 대괄호 '[['를 사용할 수도 있습니다.
산출
지정된 위치에 디렉토리(Javatpoint라는 이름)가 있으므로 위 두 방법의 출력은 다음과 같습니다.
Javatpoint is a directory
파일이 존재하지 않는지 확인
느낌표(! -논리적 NOT 연산자)를 사용하여 테스트 표현식을 부정할 수 있습니다. 다음 예를 확인하세요.
컬렉션 자바
예
#!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi
위 스크립트는 아래와 같이 작성할 수도 있습니다.
#!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable'
산출
missing_read_file.txt unavailable
파일 테스트 연산자
테스트 명령에는 특정 유형의 파일을 테스트할 수 있는 다음 파일 연산자가 포함되어 있습니다.
-b 파일 반환 | FILE이 블록 특수 파일로 존재하면 'True'입니다. |
-c 파일 반환 | FILE이 특수 문자 파일로 존재하는 경우 'True'입니다. |
-d 파일 반환 | FILE이 디렉터리로 존재하면 'True'입니다. |
-e 파일 반환 | 유형(노드, 디렉터리, 소켓 등)에 관계없이 FILE이 파일로 존재하는 경우 'True'입니다. |
-f 파일 반환 | FILE이 일반 파일(디렉토리나 장치가 아님)로 존재하는 경우 'True'입니다. |
-G 파일 반환 | FILE이 존재하고 사용자가 명령을 실행하는 것과 동일한 그룹을 포함하는 경우 'True'입니다. |
-h 파일 반환 | FILE이 심볼릭 링크로 존재하면 'True'입니다. |
-g 파일 반환 | FILE이 존재하고 set-group-id(sgid) 플래그 세트를 포함하는 경우 'True'입니다. |
-k 파일 반환 | FILE이 존재하고 고정 비트 플래그 세트를 포함하는 경우 'True'입니다. |
-L 파일 반환 | FILE이 심볼릭 링크로 존재하면 'True'입니다. |
-O 파일 반환 | FILE이 존재하고 명령을 실행하는 사용자가 소유한 경우 'True'입니다. |
-p 파일 반환 | FILE이 파이프로 존재하면 'True'입니다. |
-r 파일 반환 | FILE이 읽기 가능한 파일로 존재하면 'True'입니다. |
-S 파일 반환 | FILE이 소켓으로 존재하면 'True'입니다. |
-s 파일 반환 | FILE이 존재하고 크기가 0이 아닌 경우 'True'입니다. |
-u 파일 반환 | FILE이 존재하고 set-user-id(suid) 플래그가 설정된 경우 'True'입니다. |
-w 파일 반환 | FILE이 쓰기 가능한 파일로 존재하는 경우 'True'입니다. |
-x 파일 반환 | FILE이 실행 파일로 존재하는 경우 'True'입니다. |