관리 메뉴

피터의 개발이야기

[linux] Set -xe 옵션, 디버깅 및 오류 처리 기능 본문

Linux/Shell Script

[linux] Set -xe 옵션, 디버깅 및 오류 처리 기능

기록하는 백앤드개발자 2024. 12. 20. 18:55
반응형

ㅁ 들어가며

 linux 서버를 다르면서 많은 스크립트를 작성하고 실행하게 된다. 이럴 때에 스크립트의 디버깅에 유용한 정보를 알게 되어 정리하였다.

 

ㅁ set -xe 옵션?

set -xe 옵션은 쉘 스크립트 실행 시 유용한 디버깅 및 오류 처리 기능을 제공한다.

 

ㅁ 오류 즉시 감지(-e 옵션)

ㅇ "errexit"의 약자로, 스크립트 실행 중 오류가 발생하면 즉시 실행을 중단한다.

ㅇ 오류 전파 방지: 오류가 발생한 즉시 스크립트가 종료되어, 오류로 인한 추가적인 문제 발생을 방지한다.

신속한 디버깅: 오류 발생 지점을 빠르게 파악할 수 있어 디버깅 시간을 단축할 수 있다.

 

ㅁ 명령어 추적 (-x 옵션)

ㅇ "xtrace"의 약자로, 실행되는 각 명령어를 화면에 출력한다.

실행 흐름 파악: 스크립트의 실행 과정을 단계별로 확인할 수 있어 로직 이해가 용이하다.
변수 확장 확인: 변수가 어떻게 저장되는지 실시간으로 볼 수 있어 예상치 못한 동작을 쉽게 파악할 수 있다.

 

ㅁ 일반적 스크립트 실행

#!/bin/bash

# 변수 설정
NAME="John"
AGE=30

# 간단한 계산
NEXT_YEAR_AGE=$((AGE + 1))

# 조건문
if [ $AGE -ge 18 ]; then
    echo "$NAME is an adult."
else
    echo "$NAME is a minor."
fi

# 루프
for i in {1..3}; do
    echo "Iteration $i"
done

# 함수 정의 및 호출
greet() {
    echo "Hello, $1!"
}

greet $NAME

# 존재하지 않는 파일 읽기 시도 (오류 발생)
cat non_existent_file.txt

echo "위 오류와 별개로 다음 라인이 실행된다."

 

ㅇ just.sh를 작성하였다.

 

$ ./just.sh
John is an adult.
Iteration 1
Iteration 2
Iteration 3
Hello, John!
cat: non_existent_file.txt: No such file or directory
위 오류와 별개로 다음 라인이 실행된다.

 

ㅁ Set 옵션 주고 실행

#!/bin/bash

# 스크립트 시작 시 -xe 옵션 설정
set -xe

# 변수 설정
NAME="John"
AGE=30

# 간단한 계산
NEXT_YEAR_AGE=$((AGE + 1))

# 조건문
if [ $AGE -ge 18 ]; then
    echo "$NAME is an adult."
else
    echo "$NAME is a minor."
fi

# 루프
for i in {1..3}; do
    echo "Iteration $i"
done

# 함수 정의 및 호출
greet() {
    echo "Hello, $1!"
}

greet $NAME

# 존재하지 않는 파일 읽기 시도 (오류 발생)
cat non_existent_file.txt

echo "이 라인은 실행되지 않는다."

set -ex 옵션을 추가하였다.

 

$ ./test_set.sh
+ NAME=John
+ AGE=30
+ NEXT_YEAR_AGE=31
+ '[' 30 -ge 18 ']'
+ echo 'John is an adult.'
John is an adult.
+ for i in '{1..3}'
+ echo 'Iteration 1'
Iteration 1
+ for i in '{1..3}'
+ echo 'Iteration 2'
Iteration 2
+ for i in '{1..3}'
+ echo 'Iteration 3'
Iteration 3
+ greet John
+ echo 'Hello, John!'
Hello, John!
+ cat non_existent_file.txt
cat: non_existent_file.txt: No such file or directory

ㅇ +에 출력되는 정보를 통해 스크립트의 실행 과정과 변수의 값을 알 수 있다.

 

ㅁ 함께 보면 좋은 사이트

Linux set command option 사용법과 예시

반응형
Comments