if-then-elif-then-else

if-then
if command
then
comamnd
fi
# or
if command; then
command
fi
bash의 if-then은 일반적인 프로그래밍 언어에서 if 다음에 true | false를 평가하는 표현식이 오는 것과 달리
명령어를 받는다.
bash문의 if는 뒤의 명령어를 수행하고, 종료 상태에 따라 분기를 결정한다.
명령의 종료 상태가 0인 경우 then 아래 명령어가 수행되며 종료 상태가 0이 아니라면 실행되지 않는다.
if-then-else
if command; then
command
else
command
fi
if-then-elif-then-else
if-then 구조를 반복적으로 사용해서 중복되는 분기문을 만들 수 있지만,
대신 if-then-elif-then을 사용할 수 있다.
if command; then
command
elif command; then
command
fi
테스트 명령; test(condition) command
종료 상태로만 분기를 수행하는 bash if문에서
test 명령은 조건이 참일 경우 종료 상태 코드로 0을 돌려준다.
test condition
if test condition; then
command
fi
bash에서는 if-then 구문에서 test 명령을 사용하지 않고도 조건을 테스트 할 수 있는 방법을 제공한다.
if [ condition ]; then
command
fi
대괄호는 테스트 조건을 정의한다.
여는 대괄호와 닫는 대괄호 뒤와 앞에는 각각 빈 칸이 꼭 포함되어야 한다.
- 숫자 비교
- 문자열 비교
- 파일 비교
숫자 비교
숫자 비교에 있어서 부동 소수점은 정확도를 보장하지 않음
n1 -eq n2: n1==n2
n1 -ge n2: n1>=n2
n1 -gt n2: n1>n2
n1 -le n2: n1<=n2
n1 -lt n2: n1<n2
n1 -ne n2: n1!=n2
문자열 비교
str1 = str2
str1 != str2
str1 < str2    # 이스케이프 필요(redirect로 해석됨)
str1 > str2    # 이스케이프 필요(redirect로 해석됨)
-n str1    : str.length( ) > 0
-z str1    : str.length( )==0

문자열 비교 과정에서 사용하는 기준이 sort 명령어와 다르다.
비교 테스트(test command)에서는 ASCII 순서를 사용하기 때문에 대문자 알파벳이 항상 소문자 알파벳보다 작다.
하지만, sort에서는 시스템 로케일의 언어 설정에 정의된 정렬 순서를 사용하기 때문에 소문자가 대문자보다 앞서 정렬된다.
파일 비교
-d file:     파일 존재+디렉토리
-e file:    파일 존재
-f file:    파일 존재+파일
-r file:    파일이 존재+읽기 가능
-s file:    파일 존재+빈 파일
-w file:    파일 존재+기록 가능
-x file:    파일 존재+실행 가능
-O file:    파일 존재+현재 사용자 소유 여부
-G file:    파일 존재+현재 사용자와 같은 그룹 여부

file1 -nt file2:    file1이 file2보다 새것인지 검사
file1 -ot file2:    file1이 file2보다 오래된 것인지 검사
(파일이 생성된 시간을 기준으로 함. 파일 비교 테스트는 파일의 존재 여부를 검사하는 과정이 생략되어 있다.)

file은 상대/절대 path를 이용해서 지정
test 부울 논리(Boolean Logic)를 이용한 결합
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
부울 논리는 가능한 반환값이 TRUE 또는 FALSE로 한정된다.