Bash script: Difference between revisions
Jump to navigation
Jump to search
(Add categories: Linux, Reference) |
(Phase 6.1: LLM-Optimized Wiki Template 적용) |
||
| Line 1: | Line 1: | ||
{{Status | |||
|status=Draft | |||
|owner=Knowledge Agent | |||
|last_update=2026-07-16 | |||
|review=Pending | |||
}} | |||
{{TOC}} | |||
== Overview == | |||
Bash 스크립트는 Linux/Unix 시스템에서 명령어를 자동화하고 작업을 효율적으로 관리하기 위한 스크립트 언어입니다. | |||
=== Summary === | |||
* 무엇인가? Linux/Unix 명령어 자동화 스크립트 언어 | |||
* 왜 필요한가? 반복 작업 자동화, 시스템 관리, 배치 처리 | |||
* 언제 사용하는가? 서버 설정, 로그 분석, 백업, 배포 등 | |||
--- | |||
== Purpose == | |||
이 문서가 존재하는 이유 | |||
* Goal: Bash 스크립트의 주요 명령어, special parameters, set 옵션 설명 제공 | |||
* Scope: set 명령어 옵션, bash special parameters | |||
* Non-goals: Bash 프로그래밍 상세, 함수/배열/제어문 | |||
--- | |||
== Key Concepts == | |||
{| class="wikitable" | {| class="wikitable" | ||
! 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 스크립트 실행 프로세스: | |||
<syntaxhighlight lang="mermaid"> | |||
graph TD | |||
A[Bash 스크립트 파일] --> B[Bash 인터프리터] | |||
B --> C[명령어 파싱] | |||
C --> D[변수 설정] | |||
D --> E[조건/반복문] | |||
E --> F[명령어 실행] | |||
F --> G[결과 반환] | |||
</syntaxhighlight> | |||
--- | |||
== Workflow == | |||
Bash 스크립트 기본 워크플로우: | |||
# 스크립트 작성 | |||
# #!/bin/bash | |||
# 명령어 작성 | |||
# 실행 권한 부여 | |||
# chmod +x script.sh | |||
# 스크립트 실행 | |||
# ./script.sh | |||
--- | |||
== Detailed Explanation == | |||
=== set 명령어 === | |||
set 명령어는 셸 옵션을 활성화(-) 또는 비활성화(+)합니다. | |||
<code> | {| class="wikitable" | ||
! 옵션 | |||
! 설명 | |||
! 예제 | |||
|- | |||
| -a | |||
| 생성/수정/내보낸 변수 또는 함수 정의 | |||
| <code>set -a</code> — 변수 값 읽기 활성화 | |||
|- | |- | ||
| -b | | -b | ||
| | | 작업 종료를 알림 | ||
| — | |||
|- | |- | ||
| -B | | -B | ||
| | | 중괄호 확장(brace expansion) 작업 수행 | ||
| — | |||
|- | |- | ||
| -C | | -C | ||
| | | 기존 파일 덮어쓰기 기능 비활성화 | ||
| <code>set -C</code> — <code>cat > testfile.txt</code> 덮어쓰기 방지 | |||
|- | |- | ||
| -e | | -e | ||
| | | 0이 아닌 종료 상태 값에서 즉시 종료 | ||
| <code>set -e</code> — 에러 시 스크립트 중단 | |||
|- | |- | ||
| -f | | -f | ||
| | | 파일명 생성(task) 비활성화 | ||
| — | |||
|- | |- | ||
| -h | | -h | ||
| | | 명령어 위치 저장 | ||
| — | |||
|- | |- | ||
| -m | | -m | ||
| | | 작업 제어(job control) 활성화 | ||
| — | |||
|- | |- | ||
| -n | | -n | ||
| | | 명령어만 읽기 (실행 안 함) | ||
| — | |||
|- | |- | ||
| -t | | -t | ||
| | | 단일 명령어 실행 후 종료 | ||
| — | |||
|- | |- | ||
| -u | | -u | ||
| | | 설정되지 않은 변수 추적 — 초기화되지 않은 변수에 대해 에러 출력 | ||
| <code>set -u</code> — 미설정 변수 에러 | |||
|- | |- | ||
| -v | | -v | ||
| | | 셸 입력 줄 출력 | ||
| — | |||
|- | |- | ||
| -x | | -x | ||
| | | 명령어와 속성을 순차적으로 표시 — 주로 디버깅용 | ||
| <code>set -x</code> — 디버깅 모드 | |||
|- | |- | ||
| -- variable | | -- variable | ||
| | | 문자열 값을 공백 기준으로 3개 부분으로 분할 | ||
< | | <code>set -- $myvar</code> | ||
|} | |||
'''set 명령어 종료 값:''' | |||
* '''0''' — 작업 성공 완료 | |||
* '''1''' — 유효하지 않은 인수로 실패 | |||
* '''1''' — 누락된 인수로 실패 | |||
=== bash special parameters === | |||
{| class="wikitable" | |||
! 매개변수 | |||
! 설명 | |||
! 예제 | |||
{| class="wikitable | |||
! | |||
! | |||
! | |||
|- | |- | ||
|<code>*</code> | | <code>*</code> | ||
| | | <code>$*</code> — 위치 매개변수를 1부터 확장. 더블 쿼트 내에 있으면 IFS 첫 문자로 연결된 단일 단어 | ||
| <code>"$*"</code> — <code>"$1$c$2$c..."</code> (c는 IFS 첫 문자) | |||
|- | |- | ||
|<code>@</code> | | <code>@</code> | ||
| | | <code>$@</code> — 각 위치 매개변수를 별도 단어로서 확장 | ||
| <code>"$@"</code> — <code>"$1" "$2" ..."</code> | |||
|- | |- | ||
|<code>#</code> | | <code>#</code> | ||
| | | 위치 매개변수 개수 | ||
| <code>$#</code> — 전달된 인수 개수 | |||
|- | |- | ||
|<code>?</code> | | <code>?</code> | ||
| | | 직전 명령어의 종료 상태 | ||
| <code>$?</code> — 0=성공, 0이 아님=실패 | |||
|- | |- | ||
|<code> | | <code>$</code> | ||
| | | 스크립트 PID | ||
| <code>$$</code> — 현재 프로세스 ID | |||
|- | |- | ||
|<code> | | <code>-</code> | ||
| | | 활성화된 셸 옵션 | ||
| | | <code>$-</code> — 현재 셸 플래그 | ||
|- | |- | ||
|<code> | | <code>!</code> | ||
|($ | | 직전 백그라운드 작업의 PID | ||
| <code>$!</code> — 마지막 백그라운드 작업 PID | |||
|} | |||
--- | |||
== Configuration == | |||
=== Bash 스크립트 기본 설정 === | |||
<syntaxhighlight lang="bash"> | |||
#!/bin/bash | |||
# 에러 시 종료 | |||
set -e | |||
# 미설정 변수 에러 | |||
set -u | |||
# 디버깅 모드 (필요시) | |||
# set -x | |||
# 변수 정의 | |||
myvar="Hello World" | |||
# 위치 매개변수 사용 | |||
echo "첫 번째 인수: $1" | |||
echo "두 번째 인수: $2" | |||
echo "인수 개수: $#" | |||
</syntaxhighlight> | |||
--- | |||
== Examples == | |||
=== Example 1: set 명령어 사용 === | |||
입력: | |||
<syntaxhighlight lang="bash"> | |||
#!/bin/bash | |||
set -a | |||
v1=78 | |||
v2=50 | |||
echo "v1=$v1, v2=$v2" | |||
</syntaxhighlight> | |||
출력: | |||
<syntaxhighlight lang="bash"> | |||
v1=78, v2=50 | |||
</syntaxhighlight> | |||
=== Example 2: special parameters === | |||
입력: | |||
<syntaxhighlight lang="bash"> | |||
#!/bin/bash | |||
myvar="Learn bash programming" | |||
set -- $myvar | |||
printf "$1 | |||
$2 | |||
$3 | |||
" | |||
</syntaxhighlight> | |||
출력: | |||
<syntaxhighlight lang="bash"> | |||
Learn | |||
bash | |||
programming | |||
</syntaxhighlight> | |||
--- | |||
== Best Practices == | |||
* '''set -e 사용''' — 에러 시 스크립트 즉시 중단 (안정성) | |||
* '''set -u 사용''' — 미설정 변수 에러 감지 (버그 방지) | |||
* '''set -x 사용''' — 디버깅 시 명령어 추적 (개발 단계) | |||
* '''"$@" 사용''' — <code>"$*"</code>보다 <code>"$@"</code> 권장 (인수 분리 유지) | |||
* '''#!/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 == | |||
* [[Linux]] | |||
* [[systemd]] | |||
* [[Bazel]] | |||
* [[Cmake tips and tricks]] | |||
--- | |||
[[Category:Linux]] | [[Category:Linux]] | ||
[[Category:Reference]] | [[Category:Reference]] | ||
Revision as of 14:33, 16 July 2026
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
---