Linux_Ubuntu

[Linux] 셸스크립트/Bash 유용한 문법 모음($?, if/else문, try/catch문?)

15호의 개발자 2021. 12. 17. 15:09
반응형

[Linux] 쉘스크립트/Bash 유용한 문법 모음($?, if/else문, try/catch문?)

 

 

 

$?

리눅스에서는 변수 앞에 $가 들어간다. 환경변수를 확인할 때 echo $PATH 등의 명령어를 자주 사용하는데, 이는 환경변수 또한 변수이므로 $를 붙여주는 것이다.

 

bash(배시) 쉘에서 $?는 최근 실행한 명령어의 리턴 값(종료 스테이터스, exit status)을 의미한다. 배시에서는 성공적으로 실행됐다면 0을 반환하고, 실패했다면 1을 반환한다. (반환 값은 운영체제나 환경에 따라 조금 다르다.)

 

'최근 실행한 명령어'라는 것은 바로 전에 실행한 명령어를 의미한다.

$ true
$ echo $?
0

$ false
$ echo $?
1

 

 

 

if/else문

if [ $? -eq 0 ]
then
    echo "compile worked!"
else
    echo "compile failed..."
fi

셸 스크립트에서 if문을 사용할 때는 조건문에 들어가는 비교 연산자와 산술 연산자에 대해 알아야 한다. 비교 연산자는 문자열을 비교하는 연산자이며, 산술 연산자는 수식 또는 변수를 비교하는 연산자이다.

 

 

문자열 비교 결과
"문자열1" = "문자열2" 두 문자열이 같으면 참
"문자열1" != "문자열2" 두 문자열이 다르면 참
-n "문자열" 문자열이 NULL이 아니면 참
-z "문자열" 문자열이 NULL이면 참
산술 비교 결과 (수식 또는 변수)
수식1 -eq 수식2 두 수식이 같으면 참
수식1 -ne 수식2 두 수식이 다르면 참
수식1 -gt 수식2 수식1이 크면 참
수식1 -ge 수식2 수식1이 크거나 같으면 참
수식1 -lt 수식2 수식1이 작으면 참
수식1 -le 수식2 수식1이 작거나 같으면 참
!수식 수식이 거짓이면 참

 

 

 

배시 셸에서 if문을 사용할 때 '[ 조건 ]' 사이의 각 단어는 모두 공백으로 구분되어야 한다는 점도 주의해야 할 점이다.

 

 

cf. '[ 조건 ]'은 'test 조건'과 동일하다.

if [ $? -eq 0 ]
    =
if test $? -eq 0

 

cf. else가 없는 기본 if문만 사용하고 싶다면 아래와 같이 입력하면 된다.

if [ 조건 ]
then
    참인 경우 실행될 명령
fi

 

 

 

try/catch문?

Bash에서 Try/Catch 구문은 사용할 수 없다. 하지만 논리연산자를 이용하여 비슷하게 구현할 수는 있다.

 

command1 || command2    // command1이 실패했을 시 command2를 실행한다.

논리연산자 ||는 어느 하나만 true이면 true를 반환한다. command1이 true이면 command2를 수행하지 않고 곧바로 true를 반환하고, command1이 false이면 command2까지 수행한 다음에 그에 대한 결과를 반환한다.

command1 && command2    // command1이 성공했을 시 command2를 실행한다.

논리연산자 &&는 모두 true인 경우에만 true를 반환한다. command1이 false이면 command2를 수행하지 않고 곧바로 false를 반환하고, command1이 true이면 command2까지 수행한 다음에 그에 대한 결과를 반환한다.

 

 

이를 이용하면 아래와 같이 try/catch문을 구현할 수 있다.

 

{ # try
    command1 &&
    command2
} || { # catch
    command3
}

 

(참고: https://stackoverflow.com/questions/22009364/is-there-a-try-catch-command-in-bash)

 

 

반응형