if 문의 형식
Bash에서 if문의 기본 형식은 다음과 같다.
if 조건
then
명령
fi
if 문의 조건 부분이 참(True)인 경우에만 then 이후 명령 부분을 실행한다. 조건이 참이 아닌 경우(거짓인 경우)에는 명령을 실행하지 않는다. 명령 앞에 들여 쓰기가 있다. 프로그래밍 언어에서 이런 들여쓰기를 보통 인덴테이션(indentation), 흔히 줄여서 인덴트라고 한다. 파이썬에서는 인덴트가 코드 블록을 구분하는 중요한 역할을 한다. 하지만 Bash에서 인덴트는 아무 의미가 없다. 단지 사람이 스크립트를 읽기 쉽게 도와줄 뿐이다. 일반적으로 인덴트는 공백 4개나 탭 1개로 한 단계를 표현한다.
명령을 작성한 후에 if 문을 끝내려면 반드시 fi로 닫아줘야 한다. fi는 if를 역순으로 작성한 키워드이다.
Bash의 if 문에서는 else도 지원한다. 형식은 다음과 같다.
if 조건
then
명령1
else
명령2
fi
then 이후 명령1 부분은 조건이 참인 경우에만 실행되고, else 이후 명령2 부분은 조건이 거짓인 경우에만 실행된다.
조건문의 중첩도 지원한다. 조건문의 충첩이란 if 문의 then이나 else 이후 명령 부분에 또 다른 if 문이 오는 것을 의미한다. 형식은 다음과 같다.
if 조건
then
명령1
else
if 조건2
then
명령2
else
명령3
fi
fi
if 문의 else 부분에 if 문이 중첩되는 경우 elif 키워드를 사용해 한 문장으로 만들 수 있다. 앞의 if 문 중첩 형식을 elif를 사용한 형식으로 바꾸면 다음과 같다.
if 조건
then
명령1
elif 조건2
then
명령2
else
명령3
fi
그런데 이 형식으로 스크립트를 작성하면 길이가 길어진다는 단점이 있다. 그래서 많은 사람이 조건과 then 키워드를 한 줄에 써서 조금 짧게 줄인 형식을 선택한다. 조건의 끝은 명령의 끝을 나타내는 세미콜론(;)으로 표시한다. 겨우 한 줄 차이지만 훨씬 더 깔끔해진다.
// 기본 형식
if 조건; then
명령
fi
// else를 사용
if 조건; then
명령1
else
명령2
fi
// elif를 사용
if 조건; then
명령1
elif 조건2; then
명령2
else
명령3
fi
if 문의 조건
Bash의 if 문은 조건이 참인지 아닌지에 따라 then 이하 명령을 수행할지 말지를 결정한다. 참/거짓은 조건 부분의 명령을 실행한 결과의 성공/실패로 판단한다. 조건 부분의 명령을 실행해 프로세스 종료 코드로 0을 받으면 이 조건은 참이 된다. 0이 아닌 값을 받으면 이 조건은 거짓이 된다.
ls 명령어를 실행하면 디렉터리의 파일 목록을 출력한다. 이때 ls 명령어를 실행한 프로세스의 종료 코드는 $? 변수에 저장된다. 홈 디렉터리로 가서 ls 명령어의 종료 코드를 출력해 보자.
cd ..
ls
echo $?
if ls
> then
> echo "result is success"
> else
> echo "result is fail"
> fi
명령어를 실행하지 않고 다음 줄로 넘어가기 위해서는 Shift + Enter를 입력하면 된다. 셸에서 직접 if 문을 작성하기 어렵다면 스크립트 파일로 만들어서 실행하는 방법도 있다. ls 명령어의 실행 결과가 화면에 출력된다. 마지막으로 'result is success'라는 성공 메시지가 뜨는 것도 확인이 가능하다.
이번에는 실패하는 명령을 실행해 보자. ls로 존재하지 않는 asdf라는 파일을 조회해 보자. $? 변수값을 출력해 명령의 성공 여부를 확인한다.
ls asdf
echo #?
당연하게도 실패하고 $?를 조회해 보면 실패를 의미하는 2를 출력한다.
if ls asdf
> then
> echo "result is success"
> else
> echo "result is fail"
> fi
if 문의 조건인 ls asdf 명령이 실패하면서 'asdf'라는 파일이 없다는 에러 메시지가 출력된다. ls asdf 명령이 실패하고 종료 코드는 2가 된다. 따라서 if 문은 else 부분의 명령을 실행해 'result is fail' 메시지를 출력한다.
'프로그래밍 > 리눅스' 카테고리의 다른 글
Bash 프로그래밍 - 조건문과 테스트 연산자 (0) | 2025.03.16 |
---|---|
리눅스 필수 커맨드라인 툴 read (0) | 2025.03.04 |
리눅스(Linux) 패키지 관리 시스템에 대해서 (0) | 2025.02.17 |
리눅스에서 압축을 해보자! 필수 커맨드라인 tar 명령어 (0) | 2025.02.14 |
리눅스 필수 커맨드라인 툴 du (0) | 2025.02.14 |
댓글