if/else
- 프로그래밍 언어에서의 if문과의 차이점
- "condition"은 boolean조건이 아니라 "일련의 실행 가능한 명령들"이다.
- 명령들이 정상적으로 실행되면 "참", 그렇지 않으면 "거짓"으로 간주
- 명령의 정상적 실행여부는 그 명령의 exit status에 의해 판별
- 예시
exit status
- 모든 UNIX 명령어는 실행 후 하나의 정수 반환
- 프로그램이 정상적으로 종료되면 0, 오류가 있을 경우 0이 아닌 값 반환
- if문은 "condition"을 구성하는 명령들 중 마지막 명령의 exit code가 0이면 참, 그렇지 않으면 거짓으로 판단.
조건 검사 명령
- if 문이 exit status만을 검사할 수 있다고 해서 보통의 프로그래밍 언어처럼 어떤 조건 가령 크기관계, 동일성 등을 검사할 수 없는 것은 아니다. (검사할 수 있다.)
조건을 테스트하는 2가지 방법
-
[...]
- 예를 들어 [string1=string2] -> 두 문자열의 동일성 검사
- 이 자체가 하나의 명령. 괄호 안의 조건이 참이면 exit status가 0, 아니면 1
- 여는 괄호 다음, 닫는 괄호 앞은 반드시 공백문자
- 문자열 비교, 파일의 속성 검사 등을 할 수 있음
test string1=string2
와 동일
-
[[...]]
- 내부에서 word splitting과 pathname expansion이 수행되지 않는 점을 빼면 [...]과 동일
문자열 비교
파일 속성 검사
복합 조건
- [...] 내부에서 조건의 결합 (not, and, or)
!expr
: 부정. 즉 expr이 참이면 거짓, 거짓이면 참.
-a
: AND
-o
: OR
- 예시
if [$extension = jpg -o $extension = tga]; then
# 괄호 넣어야할 땐 escape(\) 넣기
if [\($extension=jpg\) -o \($extension=tga\) ]; then
정수에 대한 조건 검사
for
case
- 반복적인 if-then-else를 대체
select
while and until