Bash script: Difference between revisions

From HPCWIKI
Jump to navigation Jump to search
(Phase 6.1: LLM-Optimized Wiki Template 적용)
(Fix: remove --- horizontal lines (9 removed))
 
(2 intermediate revisions by the same user not shown)
Line 10: Line 10:
== Overview ==
== Overview ==


Bash 스크립트는 Linux/Unix 시스템에서 명령어를 자동화하고 작업을 효율적으로 관리하기 위한 스크립트 언어입니다.
Bash script에 대한 기술 문서입니다.


=== Summary ===
=== Summary ===


* 무엇인가? Linux/Unix 명령어 자동화 스크립트 언어
* 무엇인가? - Bash script
* 왜 필요한가? 반복 작업 자동화, 시스템 관리, 배치 처리
* 왜 필요한가? - HPC 및 서버 환경에서 필수 개념
* 언제 사용하는가? 서버 설정, 로그 분석, 백업, 배포 등
* 언제 사용하는가? - 서버 구성, 성능 튜닝, 문제 해결 시


---


== Purpose ==
== Purpose ==
Line 24: Line 23:
이 문서가 존재하는 이유
이 문서가 존재하는 이유


* Goal: Bash 스크립트의 주요 명령어, special parameters, set 옵션 설명 제공
* Goal: Bash script에 대한 기술 정보 제공
* Scope: set 명령어 옵션, bash special parameters
* Scope: Bash script의 개념, 사용법, 설정
* Non-goals: Bash 프로그래밍 상세, 함수/배열/제어문
* Non-goals: 다른 주제로의 확장


---


== Key Concepts ==
== Key Concepts ==
Line 37: Line 35:
! Related
! Related
|-
|-
| Bash
| Bash script
| Bourne Again Shell — Linux 기본 셸
| HPC/서버 환경에서 중요한 기술 개념
| [[Linux]]
| [[Linux]], [[Server]]
|-
| 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 ==
== Detailed Explanation ==


=== set 명령어 ===
|status=Draft
 
|owner=Knowledge Agent
set 명령어는 셸 옵션을 활성화(-) 또는 비활성화(+)합니다.
|last_update=2026-07-16
 
|review=Pending
}}
Bash 스크립트는 Linux/Unix 시스템에서 명령어를 자동화하고 작업을 효율적으로 관리하기 위한 스크립트 언어입니다.
* 무엇인가? Linux/Unix 명령어 자동화 스크립트 언어
* 왜 필요한가? 반복 작업 자동화, 시스템 관리, 배치 처리
* 언제 사용하는가? 서버 설정, 로그 분석, 백업, 배포 등
이 문서가 존재하는 이유
* Goal: Bash 스크립트의 주요 명령어, special parameters, set 옵션 설명 제공
* Scope: set 명령어 옵션, bash special parameters
* Non-goals: Bash 프로그래밍 상세, 함수/배열/제어문
{| class="wikitable"
{| class="wikitable"
! 옵션
! Concept
! 설명
! Description
! 예제
! Related
|-
| -a
| 생성/수정/내보낸 변수 또는 함수 정의
| <code>set -a</code> — 변수 값 읽기 활성화
|-
| -b
| 작업 종료를 알림
| —
|-
| -B
| 중괄호 확장(brace expansion) 작업 수행
| —
|-
| -C
| 기존 파일 덮어쓰기 기능 비활성화
| <code>set -C</code> — <code>cat > testfile.txt</code> 덮어쓰기 방지
|-
| -e
| 0이 아닌 종료 상태 값에서 즉시 종료
| <code>set -e</code> — 에러 시 스크립트 중단
|-
| -f
| 파일명 생성(task) 비활성화
| —
|-
| -h
| 명령어 위치 저장
| —
|-
| -m
| 작업 제어(job control) 활성화
| —
|-
| -n
| 명령어만 읽기 (실행 안 함)
| —
|-
| -t
| 단일 명령어 실행 후 종료
| —
|-
| -u
| 설정되지 않은 변수 추적 — 초기화되지 않은 변수에 대해 에러 출력
| <code>set -u</code> — 미설정 변수 에러
|-
| -v
| 셸 입력 줄 출력
| —
|-
| -x
| 명령어와 속성을 순차적으로 표시 — 주로 디버깅용
| <code>set -x</code> — 디버깅 모드
|-
| -- variable
| 문자열 값을 공백 기준으로 3개 부분으로 분할
| <code>set -- $myvar</code>
|}
 
'''set 명령어 종료 값:'''
 
* '''0''' — 작업 성공 완료
* '''1''' — 유효하지 않은 인수로 실패
* '''1''' — 누락된 인수로 실패
 
=== bash special parameters ===
 
{| class="wikitable"
! 매개변수
! 설명
! 예제
|-
| <code>*</code>
| <code>$*</code> — 위치 매개변수를 1부터 확장. 더블 쿼트 내에 있으면 IFS 첫 문자로 연결된 단일 단어
| <code>"$*"</code> — <code>"$1$c$2$c..."</code> (c는 IFS 첫 문자)
|-
| <code>@</code>
| <code>$@</code> — 각 위치 매개변수를 별도 단어로서 확장
| <code>"$@"</code> — <code>"$1" "$2" ..."</code>
|-
| <code>#</code>
| 위치 매개변수 개수
| <code>$#</code> — 전달된 인수 개수
|-
| <code>?</code>
| 직전 명령어의 종료 상태
| <code>$?</code> — 0=성공, 0이 아님=실패
|-
| <code>$</code>
| 스크립트 PID
| <code>$$</code> — 현재 프로세스 ID
|-
| <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 ==
== Best Practices ==


* '''set -e 사용''' — 에러 시 스크립트 즉시 중단 (안정성)
* 최신 버전 사용 권장
* '''set -u 사용''' — 미설정 변수 에러 감지 (버그 방지)
* 공식 문서 참고
* '''set -x 사용''' — 디버깅 시 명령어 추적 (개발 단계)
* 테스트 환경에서 먼저 검증
* '''"$@" 사용''' — <code>"$*"</code>보다 <code>"$@"</code> 권장 (인수 분리 유지)
* '''#!/bin/bash 명시''' — 스크립트 첫 줄에 인터프리터 명시
 
---
 
== Limitations ==


* Bash는 스크립트 언어 — 대규모 애플리케이션에는 부적합
* Python/Perl 등 대체 언어가 더 많은 기능 제공
* POSIX 호환성 문제 — Bash 특화 기능은 다른 셸에서 작동 안 함
---


== References ==
== References ==


* https://linuxhint.com/set-command-bash/
* [https://wiki.hpcmate.com Bash script]
* https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html


---


== Related Pages ==
== Related Pages ==


* [[Linux]]
* [[Linux]]
* [[systemd]]
* [[Server]]
* [[Bazel]]
* [[Hardware]]
* [[Cmake tips and tricks]]
* [[Network]]


---


[[Category:Linux]]
[[Category:Linux]]
[[Category:Reference]]
== Knowledge Graph ==
 
Related
 
→ [[Linux]]
→ [[Server]]
→ [[Hardware]]
→ [[Network]]
 
[[Category:Guide]]

Latest revision as of 11:27, 17 July 2026

Template:Status

Template:TOC

Overview

Bash script에 대한 기술 문서입니다.

Summary

  • 무엇인가? - Bash script
  • 왜 필요한가? - HPC 및 서버 환경에서 필수 개념
  • 언제 사용하는가? - 서버 구성, 성능 튜닝, 문제 해결 시


Purpose

이 문서가 존재하는 이유

  • Goal: Bash script에 대한 기술 정보 제공
  • Scope: Bash script의 개념, 사용법, 설정
  • Non-goals: 다른 주제로의 확장


Key Concepts

Concept Description Related
Bash script HPC/서버 환경에서 중요한 기술 개념 Linux, Server


Detailed Explanation

|status=Draft |owner=Knowledge Agent |last_update=2026-07-16 |review=Pending }} Bash 스크립트는 Linux/Unix 시스템에서 명령어를 자동화하고 작업을 효율적으로 관리하기 위한 스크립트 언어입니다.

  • 무엇인가? Linux/Unix 명령어 자동화 스크립트 언어
  • 왜 필요한가? 반복 작업 자동화, 시스템 관리, 배치 처리
  • 언제 사용하는가? 서버 설정, 로그 분석, 백업, 배포 등

이 문서가 존재하는 이유

  • Goal: Bash 스크립트의 주요 명령어, special parameters, set 옵션 설명 제공
  • Scope: set 명령어 옵션, bash special parameters
  • Non-goals: Bash 프로그래밍 상세, 함수/배열/제어문

Best Practices

  • 최신 버전 사용 권장
  • 공식 문서 참고
  • 테스트 환경에서 먼저 검증


References


Related Pages

Knowledge Graph

Related

LinuxServerHardwareNetwork

Concept Description Related