https://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/comparison-ops.html
7.2. 파일 테스트 연산자
다음 조건이 맞다면 참을 리턴
-e
존재하는 파일
-f
보통 파일(디렉토리나 디바이스 파일이 아님)
-s
파일 크기가 0 이 아님
-d
파일이 디렉토리
-b
파일이 블럭 디바이스(플로피나 시디롬 등등)
-c
파일이 문자 디바이스(키보드, 모뎀, 사운드 카드 등등)
-p
파일이 파이프
-h
파일이 심볼릭 링크
-L
파일이 심볼릭 링크
-S
파일이 소켓
-t
파일 디스크립터가 터미널 디바이스와 연관이 있음
* 스크립트의 표준입력([ -t 0 ])이나 표준출력([ -t 1 ])이 터미널인지 아닌지를 확인하는데 쓸 수 있습니다.
-r
테스트를 돌리는 사용자가 읽기 퍼미션을 갖고 있음
-w
테스트를 돌리는 사용자가 쓰기 퍼미션을 갖고 있음
-x
테스트를 돌리는 사용자가 실행 퍼미션을 갖고 있음
-g
파일이나 디렉토리에 set-group-id(sgid) 플래그가 세트되어 있음
* 디렉토리에 sgid 플래그가 세트되어 있다면 그 디렉토리에서 만들어지는 파일은 파일 생성자의 그룹이 아니라 그 디렉토리 소유자의 그룹에 속하게 됩니다. 이는 워킹그룹이 공유하는 디렉토리에서 유용하게 쓸 수 있습니다.
-u
파일에 set-user-id(suid) 플래그가 세트되어 있음
root가 소유자인 어떤 실행 파일에 set-user-id 플래그가 세트되어 있다면 일반 사용자가 그 파일을 실행시키더라도 root 권한으로 실행됩니다. [1] suid 는 시스템 하드웨어에 접근할 필요가 있는 실행 파일(pppd나 cdrecord 같은)에 유용합니다. suid 플래그가 없다면 이런 실행 파일들은 일반 사용자들이 실행 시킬 수 없습니다.
-rwsr-xr-t 1 root 178236 Oct 2 2000 /usr/sbin/pppd
suid 플래그가 걸린 파일은 퍼미션에 s라고 나타납니다.
-k
스티키 비트(sticky bit)가 세트
* 보통은 "스키키 비트"라고 알려져 있는 세이브-텍스트-모드(save-text-mode) 플래그는 특별한 형태의 파일 퍼미션입니다. 어떤 파일에 이 플래그가 세트되어 있다면 그 파일은 더 빠른 접근을 위해 캐쉬 메모리에 계속 남아 있습니다. [2] 만약에 디렉토리에 세트되어 있다면 쓰기 퍼미션을 제한합니다. 스티키 비트가 세트되어 있다면 파일이나 디렉토리 퍼미션에 t 가 붙어서 보입니다.
drwxrwxrwt 7 root 1024 May 19 21:26 tmp/
사용자는 자기가 소유하지는 않고 쓰기 퍼미션과 스티키 비트가 세트되어 있는 디렉토리에 오직 자신이 소유한 파일만 지울 수 있습니다. 이렇다면 /tmp처럼 공동으로 접근 가능한 디렉토리에서 여러 사용자가 실수로 다른 사용자의 파일을 지우거나 덮어 쓰는 것을 막아 줍니다.
-O
자신이 소유자임
-G
그룹 아이디가 자신과 같음
-N
마지막으로 읽힌 후에 변경 됐음
f1 -nt f2
f1 파일이 f2 파일보다 최신임
f1 -ot f2
f1 파일이 f2 파일보다 예전것임
f1 -ef f2
f1 파일과 f2 파일이 같은 파일을 하드 링크하고 있음
!
"not" -- 앞에서 나왔던 테스트의 의미와 반대(조건이 안 맞으면 참).
7.3. 비교 연산자(이진)
정수 비교
-eq
같음
if [ "$a" -eq "$b" ]
-ne
같지 않음
if [ "$a" -ne "$b" ]
-gt
더 큼
if ["$a" -gt "$b" ]
-ge
더 크거나 같음
if [ "$a" -ge "$b" ]
-lt
더 작음
if [ "$a" -lt "$b" ]
-le
더 작거나 같음
if [ "$a" -le "$b" ]
<
더 작음(이중 소괄호에서)
(("$a" < "$b"))
<=
더 작거나 같음(이중 소괄호에서)
(("$a" <= "$b"))
>
더 큼(이중 소괄호에서)
(("$a" > "$b"))
>=
더 크거나 같음(이중 소괄호에서)
(("$a" >= "$b"))
문자열 비교
=
같음
if [ "$a" = "$b" ]
==
같음
if [ "$a" == "$b" ]
= 와 동의어입니다.
[[ $a == z* ]] # $a 가 "z"로 시작하면 참(패턴 매칭)
[[ $a == "z*" ]] # $a 가 z* 와 같다면 참
[ $a == z* ] # 파일 globbing이나 낱말 조각남이 일어남
[ "$a" == "z*" ] # $a 가 z* 와 같다면 참
# Thanks, S.C.
!=
같지 않음
if [ "$a" != "$b" ]
* 이 연산자는 [[ ... ]] 에서 패턴 매칭을 사용합니다.
<
아스키 알파벳 순서에서 더 작음
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
"<" 가 [ ] 에서 쓰일 때는 이스케이프를 시켜야 하는 것에 주의하세요.
>
아스키 알파벳 순서에서 더 큼
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
">" 가 [ ] 에서 쓰일 때는 이스케이프를 시켜야 하는 것에 주의하세요.
이 비교 연산자를 어떻게 응용하는지 예 26-4에서 살펴보세요.
-z
문자열이 "null"임. 즉, 길이가 0
-n
문자열이 "null"이 아님.
경고
테스트 대괄호에서 -n 테스트를 받는 문자열은 꼭 쿼우트 시켜야 됩니다. 쿼우트 안 된 문자열을 ! -z와 같이 쓰거나 테스트 대괄호 없이 단독(예 7-5 참고)으로 쓰면 보통은 동작하겠지만, 위험한 습관입니다. 테스트문에서 쓰이는 문자열은 항상 쿼우트를 시켜 주세요.
'linux' 카테고리의 다른 글
RHEL VG rename 후 작업 (0) | 2016.12.21 |
---|---|
yum url 에 DVD 추가 (0) | 2016.12.14 |
shell 기본 (0) | 2010.09.20 |
boson (0) | 2007.03.16 |
iptables - 추가 (0) | 2007.03.16 |