Bash 파일 존재 유무 체크하기
Bash 쉘 스크립트를 작성할때 자주 사용하는 로직인 바로 파일 존재 유무를 체크하는 것이다. 파일 하나만 체크할 수도 있고 여러파일을 체크할 수도 있다. 여러 파일을 체크할때는 다음과 같이 할 것이다.
1 2 |
]$ ls *file.txt ls: cannot access *file.txt: 그런 파일이나 디렉터리가 없습니다 |
이것을 Bash 쉘 스크립트에서는 어떻게 리턴을 받아야 하나하는 고민이 생긴다. 가장 쉬운 방법은 stdout, stderror 를 체크하는 방법이다.
Bash 에서 이를 exit code 라고 하고 $? 에 세팅이되어 다음과 같은 로직이 가능해진다.
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash ls *file.txt if [ $? -eq 0 ] then echo "file exist!!" else echo "file doesn't exist!!" >&2 fi |
명령어가 성공(stdout)하면 $?에 0, stderr 면 1 이다. 위를 실행하면 다음과 같다.
1 2 3 |
]$ ./a.sh ls: cannot access *file.txt: 그런 파일이나 디렉터리가 없습니다 file doesn't exist!! |
위 방법외에도 한줄로 다음과 같이 할 수도 있다.
1 |
(ls x.txt && echo yes) || echo no |
AND 와 OR 연산자를 이용해서 메시지를 출력하도록 한다.
하지만 위 방법도 오류 메시지, 혹은 결과가 출력이 되는데 이를 방지하고 결과만 받고 싶다면 다음과 같이 할 수 있다.
1 |
(ls x.txt >> /dev/null 2>&1 && echo yes) || echo no |
이렇게 하면 결과 출력 없이 yes, no 만 출력이 된다.