개발/Bash 쉘스크립트

[Bash] 리눅스 쉘 스크립트: set 기본 사용 법 및 옵션 까지 모두 정리

일요일좋아하는사람 2025. 5. 5. 21:19
728x90
반응형

쉘 스크립트를 작성하거나 터미널에서 명령어를 입력할 때, Bash 셸에서 set 명령어는 아주 강력하고 유용한 도구입니다. 이 명령어는 셸의 동작 방식을 세밀하게 제어할 수 있게 해주며, 특히 스크립트의 디버깅, 에러 처리, 보안 등을 관리하는 데 매우 중요합니다. 이 글에서는 set 명령어의 역할과 사용법, 그리고 다양한 옵션들의 기능과 예제를 통해 이 명령어를 완전히 이해할 수 있도록 설명하겠습니다.

set 명령어의 역할

set 명령어는 현재 Bash 셸 환경에서 동작 방식을 변경하거나 설정 값을 조정하는 역할을 합니다. 이 명령어는 위치 파라미터를 설정하거나, 셸 옵션을 켜고 끄는 데 사용됩니다. 특히 셸 스크립트 내에서 에러 발생 시 자동 종료, 명령어 추적, 확장된 글로브 패턴 사용 등을 제어하는 데 유용하게 쓰입니다.

set 명령어 기본 사용법

set [옵션들]

옵션은 한 글자씩 '-' 또는 '+' 기호와 함께 사용하며, '-'는 옵션을 활성화하고 '+'는 비활성화합니다. 예를 들어 set -e는 에러 발생 시 스크립트를 종료하게 하고, set +e는 이 기능을 끕니다.

주요 옵션들과 세부 사용법

-e: 에러 발생 시 즉시 종료

  • 역할: 스크립트 실행 중 에러(종료 상태 0이 아님)가 발생하면 즉시 종료함.
  • 사용법:
  • set -e
  • 예제:
  • set -e echo "시작" false echo "이 문장은 출력되지 않음"
  • 결과: false 명령에서 에러가 발생하므로 그 이후 명령은 실행되지 않고 스크립트가 종료됨.

-u: 선언되지 않은 변수 사용 시 에러

  • 역할: 스크립트에서 선언되지 않은 변수를 참조할 경우 에러 발생.
  • 사용법:
  • set -u
  • 예제:
  • set -u echo $undefined_var
  • 결과: undefined_var가 정의되지 않았기 때문에 스크립트는 에러를 발생시키고 종료됨.

-x: 명령어 실행 전 출력 (디버깅용)

  • 역할: 각 명령을 실행하기 전에 터미널에 출력하여 디버깅에 유용.
  • 사용법:
  • set -x
  • 예제:
  • set -x echo "Hello" ls /nonexistent
  • 결과: 실행되는 각 명령이 터미널에 출력되며, 에러 여부를 명확히 파악 가능.

-v: 명령어 실행 전 스크립트에서의 내용을 출력

  • 역할: 실행 전 스크립트의 명령어 라인을 그대로 보여줌.
  • 사용법:
  • set -v
  • 예제:
  • set -v echo "Hello"
  • 결과: 스크립트의 코드 줄 자체가 출력됨. 디버깅이나 로깅에 유용.

-o 옵션명: 긴 이름의 옵션 사용

  • 역할: 특정 기능을 긴 이름으로 지정하여 활성화.
  • 사용법:
  • set -o errexit
  • 예제:
  • set -o nounset echo $undefined_var
  • 결과: -u와 같은 효과. 정의되지 않은 변수 사용 시 에러 발생.

+ 옵션: 옵션 끄기

  • 역할: -로 켠 옵션을 +로 끌 수 있음.
  • 사용법:
  • set +x
  • 예제:
  • set -x echo "디버깅 중" set +x echo "디버깅 종료"
  • 결과: set +x 이후부터는 명령어가 출력되지 않음.

--: 위치 파라미터 시작

  • 역할: 옵션 설정이 끝났음을 명시하고 이후는 위치 파라미터로 처리.
  • 사용법:
  • set -- arg1 arg2
  • 예제:
  • set -- apple banana cherry echo $1 $2 $3
  • 결과: apple banana cherry가 위치 파라미터로 설정되어 $1, $2, $3에 각각 할당됨.

실제 사용 예제

#!/bin/bash
set -euxo pipefail

echo "파일 리스트 확인"
ls *.txt | grep log

echo "모든 작업 완료"

결과:

  • -e: 에러 발생 시 즉시 종료
  • -u: 선언되지 않은 변수 사용 방지
  • -x: 실행되는 명령 출력
  • -o pipefail: 파이프라인에서 하나라도 실패하면 전체 실패로 간주

이처럼 set 명령어는 Bash 스크립트의 안정성, 디버깅 편의성, 에러 처리를 강화하는 데 중요한 역할을 합니다. 스크립트를 작성할 때 꼭 필요한 부분이므로, 각 옵션의 의미와 사용법을 정확히 이해하고 적절히 활용하는 것이 좋습니다.

728x90
반응형