Skip to content

Bash:Test

테스트 (Test Constructs).

  • if/then 은 명령어 목록의 종료 상태가 0 (유닉스 관례상 0은 "성공"을 나타내므로)인지 테스트를 해보고 맞다면 다음 명령어들을 실행시킵니다.
  • 테스트 전용 명령어로 [ (왼쪽 대괄호 특수 문자)란 것이 있습니다. test명령어와 동의어이고, 효율적인 이유로 내장 명령입니다. 이 명령어는 자신의 인자를 비교식이나 파일 테스트로 인식해 해당 연산의 결과에 따른 종료 상태(참은 0, 거짓은 1)를 리턴합니다.
  • 또한, 다른 언어를 쓰던 프로그래머에게 어느 정도 더 친숙한 비교 연산을 제공해 주는 [[ ... ]]를 Bash 2.02 버전부터 제공합니다. 주의할 점은 [[가 명령어가 아닌 키워드라는 것입니다.
  • Bash 는 [[ $a -lt $b ]]를 종료 상태를 리턴하는 하나의 요소로 이해합니다.

Operator

다음 조건이 맞다면 참을 리턴

  • -e: 존재하는 파일
  • -f: 보통 파일(디렉토리나 디바이스 파일이 아님)
  • -s: 파일 크기가 0 이 아님
  • -d: 파일이 디렉토리
  • -b: 파일이 블럭 디바이스(플로피나 시디롬 등등)
  • -c: 파일이 문자 디바이스(키보드, 모뎀, 사운드 카드 등등)
  • -p: 파일이 파이프
  • -h: 파일이 심볼릭 링크
  • -L: 파일이 심볼릭 링크
  • -S: 파일이 소켓
  • -t: 파일 디스크립터가 터미널 디바이스와 연관이 있음. 스크립트의 표준입력([ -t 0 ])이나 표준출력([ -t 1 ])이 터미널인지 아닌지를 확인하는데 쓸 수 있습니다.
  • -r: 테스트를 돌리는 사용자가 읽기 퍼미션을 갖고 있음
  • -w: 테스트를 돌리는 사용자가 쓰기 퍼미션을 갖고 있음
  • -x: 테스트를 돌리는 사용자가 실행 퍼미션을 갖고 있음
  • -g: 파일이나 디렉토리에 set-group-id(sgid) 플래그가 세트되어 있음
  • -u: 파일에 set-user-id(suid) 플래그가 세트되어 있음
  • -k: 스티키 비트(sticky bit)가 세트
  • -O: 자신이 소유자임
  • -G: 그룹 아이디가 자신과 같음
  • -N: 마지막으로 읽힌 후에 변경 됐음
  • f1 -nt f2: f1 파일이 f2 파일보다 최신임
  • f1 -ot f2: f1 파일이 f2 파일보다 예전것임
  • f1 -ef f2: f1 파일과 f2 파일이 같은 파일을 하드 링크하고 있음
  • !: 부정.
  • -n: 문자열 길이가 0이 아닌 경우.
  • -z: 문자열 길이가 0인 경우.

[ vs [[

  • [[ ]]는 쉘 상에서 [ ]과 동일합니다. 이 명령어는 ksh88에서 따 온 확장 테스트 명령어입니다.
  • [[]] 사이에서는 파일명 확장이나 낱말 조각남이 일어나지 않지만 매개변수 확장이나 명령어 치환은 일어납니다.
  • [ ... ] 말고 [[ ... ]] 를 쓰면 많은 논리적 에러들을 막을 수 있습니다. 예를 들어 &&, ||, <, > 연산자들은 [ ] 에서 에러를 내지만 [[ ]] 에서는 잘 동작합니다.

대괄호 두개를 쓸 경우 또 한가지 장점은, 조건식이 두개 이상 있어서 AND/OR 연산을 할 때 보기가 좀 더 편하다는 것이다.

num=1
name="john"

# 조건식: num=1 AND name="john"
if [ $num -eq 1 -a $name = "john" ]
then echo "$num: $name"
fi

# 대괄호 두개 사용
if [[ $num -eq 1 ]] && [[ $name = "john" ]]
then echo "$num: $name"
fi

((

  • (( ... ))let ... 은 자신이 계산한 산술식이 0이 아닌 값을 가질 경우에 종료 상태 0을 리턴합니다. 따라서, 이런 산술 확장은 산술 비교를 할 때 쓸 수 있습니다.
# test if file exists (test actual file, not symbolic link)
if [ ! -e "$F" ] ; then
    # code if the symlink is broken
fi

See also

Favorite site