개발 환경 및 프로젝트 관리/Linux 개념

Bash의 Logical AND / OR (논리 연산자)

Data Jun 2025. 10. 8. 11:39

Bash 스크립트에서 여러 조건을 한 번에 검사할 때,
AND(그리고), OR(또는) 연산을 사용합니다.
예를 들어, “파일이 존재하고 실행 권한이 있을 때” 또는 “하나라도 조건을 만족할 때”처럼요.

 

Single Square Bracket: [ ] 구문

Bash의 기본적인 조건문 구문입니다.
이 안에서 논리 연산을 할 때는 다음과 같은 방법을 사용할 수 있습니다.

 

기본 연산자

연산자 의미
-a logical AND (그리고)
-o logical OR (또)

예시

if [ -f file.txt -a -r file.txt ]; then
    echo "파일이 존재하고 읽기 권한이 있습니다."
fi

 -a, -o 연산자는 가독성이 떨어지고, 복잡한 조건에서는 오류를 유발할 수 있기 때문에 &&, || 형태로 사용하는 것이 더 안전하고 권장됩니다.

 

[ expr ] && [ expr ] 형태

이 방법은 두 개의 독립된 조건문을 논리적으로 연결합니다.

if [ -f file.txt ] && [ -r file.txt ]; then
    echo "파일이 존재하고 읽을 수 있습니다."
fi

 

  • && : 앞의 조건이 참(true) 일 때만 뒤의 조건을 평가
  • || : 앞의 조건이 거짓(false) 이면 뒤의 조건을 평가

즉,

[ expr ] && [ expr ]   # AND (둘 다 참)
[ expr ] || [ expr ]   # OR  (둘 중 하나라도 참)

 

 

Double Square Bracket: [[ ]] 구문

[[ ]] 구문은 Bash 확장형 조건식으로,
[ ]보다 더 강력하고 문법 오류에 덜 민감합니다.

 

이 구문에서는 논리 연산자를 C언어 스타일로 바로 사용할 수 있습니다.

 

예시

if [[ -f file.txt && -r file.txt ]]; then
    echo "파일이 존재하고 읽기 권한이 있습니다."
fi
if [[ -d dir || -L dir ]]; then
    echo "디렉토리이거나 심볼릭 링크입니다."
fi

[[ ]]의 장점:

  • 문자열 비교 시 쿼팅 실수에 덜 민감함
  • 공백이나 특수문자가 포함돼도 오류가 잘 안 남
  • 복합 조건식을 한 줄에 깔끔하게 표현 가능

예시로 정리하기

file="data.txt"
dir="logs"

# [ ] 방식
if [ -f "$file" ] && [ -w "$file" ]; then
    echo "파일이 존재하고 쓰기 가능"
fi

# [[ ]] 방식 (권장)
if [[ -d "$dir" || -L "$dir" ]]; then
    echo "디렉토리이거나 심볼릭 링크입니다."
fi

 

 

정리하면


Bash에서는 [ ]보다 [[ ]]를 사용하고,
-a, -o 대신 &&, ||를 쓰는 것이 현대적이고 안전합니다.