Bash script
Jump to navigation
Jump to search
Overview
Bash 스크립트는 Linux/Unix 시스템에서 명령어를 자동화하고 작업을 효율적으로 관리하기 위한 스크립트 언어입니다.
Summary
- 무엇인가? Linux/Unix 명령어 자동화 스크립트 언어
- 왜 필요한가? 반복 작업 자동화, 시스템 관리, 배치 처리
- 언제 사용하는가? 서버 설정, 로그 분석, 백업, 배포 등
---
Purpose
이 문서가 존재하는 이유
- Goal: Bash 스크립트의 주요 명령어, special parameters, set 옵션 설명 제공
- Scope: set 명령어 옵션, bash special parameters
- Non-goals: Bash 프로그래밍 상세, 함수/배열/제어문
---
Key Concepts
| Concept | Description | Related |
|---|---|---|
| Bash | Bourne Again Shell — Linux 기본 셸 | Linux |
| set | 셸 옵션 활성화/비활성화 명령어 | Bash script |
| special parameters | $*, $@, $#, $?, $$ 등 특수 매개변수 | Bash script |
| IFS | Internal Field Separator — 필드 구분자 | Bash script |
| positional parameters | $1, $2, $3... — 위치 매개변수 | Bash script |
---
Architecture
Bash 스크립트 실행 프로세스:
graph TD
A[Bash 스크립트 파일] --> B[Bash 인터프리터]
B --> C[명령어 파싱]
C --> D[변수 설정]
D --> E[조건/반복문]
E --> F[명령어 실행]
F --> G[결과 반환]---
Workflow
Bash 스크립트 기본 워크플로우:
- 스크립트 작성
- #!/bin/bash
- 명령어 작성
- 실행 권한 부여
- chmod +x script.sh
- 스크립트 실행
- ./script.sh
---
Detailed Explanation
set 명령어
set 명령어는 셸 옵션을 활성화(-) 또는 비활성화(+)합니다.
| 옵션 | 설명 | 예제 |
|---|---|---|
| -a | 생성/수정/내보낸 변수 또는 함수 정의 | set -a — 변수 값 읽기 활성화
|
| -b | 작업 종료를 알림 | — |
| -B | 중괄호 확장(brace expansion) 작업 수행 | — |
| -C | 기존 파일 덮어쓰기 기능 비활성화 | set -C — cat > testfile.txt 덮어쓰기 방지
|
| -e | 0이 아닌 종료 상태 값에서 즉시 종료 | set -e — 에러 시 스크립트 중단
|
| -f | 파일명 생성(task) 비활성화 | — |
| -h | 명령어 위치 저장 | — |
| -m | 작업 제어(job control) 활성화 | — |
| -n | 명령어만 읽기 (실행 안 함) | — |
| -t | 단일 명령어 실행 후 종료 | — |
| -u | 설정되지 않은 변수 추적 — 초기화되지 않은 변수에 대해 에러 출력 | set -u — 미설정 변수 에러
|
| -v | 셸 입력 줄 출력 | — |
| -x | 명령어와 속성을 순차적으로 표시 — 주로 디버깅용 | set -x — 디버깅 모드
|
| -- variable | 문자열 값을 공백 기준으로 3개 부분으로 분할 | set -- $myvar
|
set 명령어 종료 값:
- 0 — 작업 성공 완료
- 1 — 유효하지 않은 인수로 실패
- 1 — 누락된 인수로 실패
bash special parameters
| 매개변수 | 설명 | 예제 |
|---|---|---|
*
|
$* — 위치 매개변수를 1부터 확장. 더블 쿼트 내에 있으면 IFS 첫 문자로 연결된 단일 단어
|
"$*" — "$1$c$2$c..." (c는 IFS 첫 문자)
|
@
|
$@ — 각 위치 매개변수를 별도 단어로서 확장
|
"$@" — "$1" "$2" ..."
|
#
|
위치 매개변수 개수 | $# — 전달된 인수 개수
|
?
|
직전 명령어의 종료 상태 | $? — 0=성공, 0이 아님=실패
|
$
|
스크립트 PID | $$ — 현재 프로세스 ID
|
-
|
활성화된 셸 옵션 | $- — 현재 셸 플래그
|
!
|
직전 백그라운드 작업의 PID | $! — 마지막 백그라운드 작업 PID
|
---
Configuration
Bash 스크립트 기본 설정
#!/bin/bash
# 에러 시 종료
set -e
# 미설정 변수 에러
set -u
# 디버깅 모드 (필요시)
# set -x
# 변수 정의
myvar="Hello World"
# 위치 매개변수 사용
echo "첫 번째 인수: $1"
echo "두 번째 인수: $2"
echo "인수 개수: $#"
---
Examples
Example 1: set 명령어 사용
입력:
#!/bin/bash
set -a
v1=78
v2=50
echo "v1=$v1, v2=$v2"
출력:
v1=78, v2=50
Example 2: special parameters
입력:
#!/bin/bash
myvar="Learn bash programming"
set -- $myvar
printf "$1
$2
$3
"
출력:
Learn
bash
programming
---
Best Practices
- set -e 사용 — 에러 시 스크립트 즉시 중단 (안정성)
- set -u 사용 — 미설정 변수 에러 감지 (버그 방지)
- set -x 사용 — 디버깅 시 명령어 추적 (개발 단계)
- "$@" 사용 —
"$*"보다"$@"권장 (인수 분리 유지) - #!/bin/bash 명시 — 스크립트 첫 줄에 인터프리터 명시
---
Limitations
- Bash는 스크립트 언어 — 대규모 애플리케이션에는 부적합
- Python/Perl 등 대체 언어가 더 많은 기능 제공
- POSIX 호환성 문제 — Bash 특화 기능은 다른 셸에서 작동 안 함
---
References
- https://linuxhint.com/set-command-bash/
- https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html
---
Related Pages
---