← 홈

💻Bash 스크립팅

⌘K
🤖
Claude Code AI 도구
🤗
Hugging Face AI 도구
🦜
LangChain AI 도구
🧠
Keras AI 도구
🦙
Ollama AI 도구
🐍
Python 프로그래밍 언어
🟨
JavaScript 프로그래밍 언어
🔷
TypeScript 프로그래밍 언어
⚛️
React 프로그래밍 언어
🐹
Go 프로그래밍 언어
🦀
Rust 프로그래밍 언어
📊
MATLAB 프로그래밍 언어
🗄️
SQL 프로그래밍 언어
⚙️
C/C++ 프로그래밍 언어
Java 프로그래밍 언어
🟣
C# 프로그래밍 언어
🍎
Swift 프로그래밍 언어
🟠
Kotlin 프로그래밍 언어
Next.js 프로그래밍 언어
💚
Vue.js 프로그래밍 언어
🔥
Svelte 프로그래밍 언어
🎨
Tailwind CSS 프로그래밍 언어
💚
Node.js 프로그래밍 언어
🌐
HTML 프로그래밍 언어
🎨
CSS/SCSS 프로그래밍 언어
🐘
PHP 프로그래밍 언어
💎
Ruby 프로그래밍 언어
🔴
Scala 프로그래밍 언어
📊
R 프로그래밍 언어
🎯
Dart 프로그래밍 언어
💧
Elixir 프로그래밍 언어
🌙
Lua 프로그래밍 언어
🐪
Perl 프로그래밍 언어
🅰️
Angular 프로그래밍 언어
🚂
Express.js 프로그래밍 언어
🐱
NestJS 프로그래밍 언어
🛤️
Ruby on Rails 프로그래밍 언어
◼️
GraphQL 프로그래밍 언어
🟪
Haskell 프로그래밍 언어
💚
Nuxt.js 프로그래밍 언어
🔷
SolidJS 프로그래밍 언어
htmx 프로그래밍 언어
💻
VS Code 개발 도구
🧠
PyCharm 개발 도구
📓
Jupyter 개발 도구
🧠
IntelliJ IDEA 개발 도구
💚
Neovim 개발 도구
🔮
Emacs 개발 도구
🔀
Git DevOps & CLI
🐳
Docker DevOps & CLI
☸️
Kubernetes DevOps & CLI
☁️
AWS CLI DevOps & CLI
🔄
GitHub Actions DevOps & CLI
🐧
Linux 명령어 DevOps & CLI
💻
Bash 스크립팅 DevOps & CLI
🌐
Nginx DevOps & CLI
📝
Vim DevOps & CLI
🔨
Makefile DevOps & CLI
🧪
Pytest DevOps & CLI
🪟
Windows DevOps & CLI
📦
패키지 매니저 DevOps & CLI
🍎
macOS DevOps & CLI
🏗️
Terraform DevOps & CLI
🔧
Ansible DevOps & CLI
Helm DevOps & CLI
🔨
Jenkins DevOps & CLI
🔥
Prometheus DevOps & CLI
📊
Grafana DevOps & CLI
💻
Zsh DevOps & CLI
🐟
Fish Shell DevOps & CLI
💙
PowerShell DevOps & CLI
🔄
Argo CD DevOps & CLI
🔀
Traefik DevOps & CLI
☁️
Azure CLI DevOps & CLI
☁️
Google Cloud CLI DevOps & CLI
📟
tmux DevOps & CLI
🔧
jq DevOps & CLI
✂️
sed DevOps & CLI
📊
awk DevOps & CLI
🌊
Apache Airflow DevOps & CLI
🔢
NumPy 데이터베이스 & 데이터
🐼
Pandas 데이터베이스 & 데이터
🔥
PyTorch 데이터베이스 & 데이터
🧠
TensorFlow 데이터베이스 & 데이터
📈
Matplotlib 데이터베이스 & 데이터
🐘
PostgreSQL 데이터베이스 & 데이터
🐬
MySQL 데이터베이스 & 데이터
🍃
MongoDB 데이터베이스 & 데이터
🔴
Redis 데이터베이스 & 데이터
🔍
Elasticsearch 데이터베이스 & 데이터
🤖
Scikit-learn 데이터베이스 & 데이터
👁️
OpenCV 데이터베이스 & 데이터
Apache Spark 데이터베이스 & 데이터
🪶
SQLite 데이터베이스 & 데이터
Supabase 데이터베이스 & 데이터
🔵
Neo4j 데이터베이스 & 데이터
📨
Apache Kafka 데이터베이스 & 데이터
🐰
RabbitMQ 데이터베이스 & 데이터
🔤
Regex 유틸리티
📝
Markdown 유틸리티
📄
LaTeX 유틸리티
🔐
SSH & GPG 유틸리티
🌐
curl & HTTP 유틸리티
📜
reStructuredText 유틸리티
🚀
Postman 유틸리티
🎬
FFmpeg 유틸리티
🖼️
ImageMagick 유틸리티
🔍
ripgrep 유틸리티
🔍
fzf 유틸리티
📗
Microsoft Excel 오피스 애플리케이션
📘
Microsoft Word 오피스 애플리케이션
📙
Microsoft PowerPoint 오피스 애플리케이션
📝
한컴 한글 한컴오피스
📽️
한컴 한쇼 한컴오피스
📊
한컴 한셀 한컴오피스
📄
Google 문서 Google Workspace
📊
Google 스프레드시트 Google Workspace
📽️
Google 프레젠테이션 Google Workspace
🔌
Cadence Virtuoso EDA & 하드웨어
⚙️
Synopsys EDA EDA & 하드웨어
💎
Verilog & VHDL EDA & 하드웨어
LTSpice EDA & 하드웨어
🔧
KiCad EDA & 하드웨어
📝
Notion 생산성 도구
💎
Obsidian 생산성 도구
💬
Slack 생산성 도구
🎮
Discord 생산성 도구
🎨
Figma 디자인 도구
📘
Confluence Atlassian
📋
Jira Atlassian
🃏
Jest 테스팅
Vitest 테스팅
🎭
Playwright 테스팅
🌲
Cypress 테스팅
🌐
Selenium 테스팅
💙
Flutter 모바일 개발
📱
React Native 모바일 개발
🍎
SwiftUI 모바일 개발
📱
Expo 모바일 개발
🐍
Django 웹 프레임워크
FastAPI 웹 프레임워크
🌶️
Flask 웹 프레임워크
🍃
Spring Boot 웹 프레임워크
🍸
Gin 웹 프레임워크
Vite 빌드 도구
📦
Webpack 빌드 도구
esbuild 빌드 도구
🐘
Gradle 빌드 도구
🪶
Maven 빌드 도구
🔧
CMake 빌드 도구
🎮
Unity 게임 개발
🤖
Godot 게임 개발
🔌
Arduino 임베디드 & IoT
🔍
Nmap 보안
🐕
Datadog 모니터링
📖
Swagger/OpenAPI 문서화
검색 결과가 없습니다
EN KO

📝 스크립트 기본

셔뱅 & 실행

#!/bin/bash Bash 셔뱅 (스크립트 첫 줄)
#!/usr/bin/env bash 이식성 있는 셔뱅
chmod +x script.sh 스크립트 실행 가능하게 만들기
./script.sh 현재 디렉토리에서 스크립트 실행
bash script.sh bash로 스크립트 실행
source script.sh 현재 쉘에서 스크립트 실행
. script.sh source와 동일 (축약형)

주석 & 디버그

# comment 한 줄 주석
set -x 디버그 모드 활성화 (명령어 출력)
set +x 디버그 모드 비활성화
set -e 에러 시 종료
set -u 정의되지 않은 변수 시 에러
set -o pipefail 파이프라인 중 하나라도 실패하면 실패

📦 변수

변수 기본

name="value" 변수 할당 (= 주위 공백 없음)
$name or ${name} 변수 사용
readonly name="value" 읽기 전용 변수 (상수)
unset name 변수 삭제
local name="value" 지역 변수 (함수 내부)
export name="value" 환경 변수로 내보내기
declare -i num=5 정수 변수 선언

특수 변수

$0 스크립트 이름
$1, $2, ... 위치 매개변수 (인수)
$# 인수 개수
$@ 모든 인수 (개별 단어로)
$* 모든 인수 (단일 문자열로)
$? 마지막 명령어 종료 상태
$$ 현재 프로세스 ID
$! 마지막 백그라운드 프로세스 PID

매개변수 확장

${var:-default} var가 없으면 default 사용
${var:=default} var가 없으면 default 할당
${var:+value} var가 있으면 value 사용
${var:?error} var가 없으면 에러
${#var} 변수 길이
${var^^} 전체 대문자
${var,,} 전체 소문자

🔤 문자열

문자열 연산

"double quotes" 변수 확장 허용
'single quotes' 리터럴 문자열 (확장 없음)
${var:0:5} 위치 0부터 길이 5 부분 문자열
${var:7} 위치 7부터 끝까지
${var: -4} 마지막 4글자 (공백 주의)
${var/old/new} 첫 번째 항목 교체
${var//old/new} 모든 항목 교체

패턴 제거

${var#pattern} 시작에서 최단 일치 제거
${var##pattern} 시작에서 최장 일치 제거
${var%pattern} 끝에서 최단 일치 제거
${var%%pattern} 끝에서 최장 일치 제거
${file%.txt} 예: .txt 확장자 제거
${path##*/} 예: 경로에서 파일명 추출

📚 배열

인덱스 배열

arr=(a b c d) 배열 생성
arr[0]="value" 인덱스에 요소 설정
${arr[0]} 인덱스의 요소 가져오기
${arr[@]} 모든 요소
${#arr[@]} 배열 길이
${!arr[@]} 모든 인덱스
arr+=(e f) 요소 추가
unset arr[1] 인덱스의 요소 삭제

연관 배열

declare -A map 연관 배열 선언
map[key]="value" 키-값 쌍 설정
${map[key]} 키로 값 가져오기
${!map[@]} 모든 키
${map[@]} 모든 값
unset map[key] 키-값 쌍 삭제

조건문

If 문

if [[ condition ]]; then ... fi 기본 if 문
if [[ cond ]]; then ... else ... fi If-else 문
if [[ cond1 ]]; then ... elif [[ cond2 ]]; then ... fi If-elif 문
[[ cond ]] && cmd 축약 if (and)
[[ cond ]] || cmd 축약 if not (or)

테스트 연산자 (문자열)

[[ -z "$str" ]] 문자열이 비어있음
[[ -n "$str" ]] 문자열이 비어있지 않음
[[ "$a" == "$b" ]] 문자열이 같음
[[ "$a" != "$b" ]] 문자열이 다름
[[ "$str" =~ regex ]] 정규식 일치
[[ "$str" == pattern* ]] 패턴 일치 (glob)

테스트 연산자 (숫자)

[[ $a -eq $b ]] 같음
[[ $a -ne $b ]] 다름
[[ $a -lt $b ]] 작음
[[ $a -le $b ]] 작거나 같음
[[ $a -gt $b ]]
[[ $a -ge $b ]] 크거나 같음
(( a == b )) 산술 비교

테스트 연산자 (파일)

[[ -e "$file" ]] 파일 존재
[[ -f "$file" ]] 일반 파일인지
[[ -d "$dir" ]] 디렉토리인지
[[ -s "$file" ]] 파일이 비어있지 않음
[[ -r "$file" ]] 읽기 가능
[[ -w "$file" ]] 쓰기 가능
[[ -x "$file" ]] 실행 가능
[[ -L "$file" ]] 심볼릭 링크인지

🔁 반복문

For 반복문

for i in 1 2 3; do echo $i; done 기본 for 반복문
for i in {1..10}; do 범위 (1부터 10)
for i in {1..10..2}; do 단계 포함 범위 (1,3,5,7,9)
for file in *.txt; do 파일 순회
for arg in "$@"; do 인수 순회
for ((i=0; i<10; i++)); do C 스타일 for 반복문

While & Until 반복문

while [[ cond ]]; do ... done While 반복문
until [[ cond ]]; do ... done Until 반복문 (while의 반대)
while true; do 무한 루프
while read -r line; do ... done < file.txt 파일을 줄 단위로 읽기
while IFS= read -r line; do 읽을 때 공백 유지

반복문 제어

break 반복문 종료
break 2 2단계 반복문 종료
continue 다음 반복으로 건너뛰기
continue 2 외부 반복문 계속

🔀 Case & Select

Case 문

case $var in pattern1) cmd1 ;; pattern2) cmd2 ;; *) default ;; esac Case 문 구조
a|b|c) 여러 패턴 일치
*.txt) Glob 패턴 매칭
[0-9]*) 범위 패턴
;; Case 블록 종료 (break)
;& 다음 case로 이동

Select 메뉴

select opt in opt1 opt2 opt3; do ... break; done 대화형 메뉴
$REPLY select에서 사용자 입력 번호
PS3="Choose: " select용 사용자 정의 프롬프트

⚙️ 함수

함수 정의

function name() { ... } 키워드를 사용한 함수
name() { ... } 함수 축약형
local var="value" 함수 내 지역 변수
return 0 종료 상태 반환 (0-255)
echo "result" stdout으로 값 반환

함수 인수

$1, $2, ... 함수 인수
$# 인수 개수
$@ 모든 인수
shift 인수를 왼쪽으로 1개 이동
shift 2 인수를 왼쪽으로 2개 이동
result=$(func arg1 arg2) 함수 출력 캡처

📤 입출력

사용자 입력

read var 변수로 읽기
read -p "Prompt: " var 프롬프트와 함께 읽기
read -s password 조용히 읽기 (비밀번호용)
read -t 5 var 5초 타임아웃으로 읽기
read -n 1 char 단일 문자 읽기
read -a arr 배열로 읽기
read -r line raw로 읽기 (백슬래시 이스케이프 없음)

출력

echo "text" 줄바꿈과 함께 출력
echo -n "text" 줄바꿈 없이 출력
echo -e "a\tb\n" 이스케이프 시퀀스 활성화
printf "%s\n" "$var" 형식화된 출력
printf "%-10s %d\n" "name" 42 형식 지정 printf

리다이렉션

cmd > file stdout을 파일로 (덮어쓰기)
cmd >> file stdout을 파일로 (추가)
cmd 2> file stderr를 파일로
cmd &> file stdout과 stderr 모두 리다이렉트
cmd 2>&1 stderr를 stdout으로
cmd < file 파일에서 stdin 읽기
cmd <<< "string" Here-string

🔢 산술 연산

산술 연산

$((a + b)) 덧셈
$((a - b)) 뺄셈
$((a * b)) 곱셈
$((a / b)) 나눗셈 (정수)
$((a % b)) 나머지
$((a ** b)) 거듭제곱
((a++)) 증가
((a--)) 감소
((a += 5)) 더하고 할당

부동소수점 (bc)

echo 'scale=2; 5/3' | bc 소수점 2자리 나눗셈
echo 'sqrt(2)' | bc -l 수학 라이브러리로 제곱근
result=$(echo "$a + $b" | bc) 부동소수점 덧셈

🔧 명령 치환

치환 & 서브쉘

$(command) 명령 치환 (권장)
`command` 명령 치환 (레거시)
files=$(ls *.txt) 명령 출력 저장
echo "Date: $(date)" 인라인 치환
( cd /tmp && cmd ) 서브쉘 (격리된 환경)
{ cmd1; cmd2; } 명령 그룹 (같은 쉘)

프로세스 치환

diff <(cmd1) <(cmd2) 두 명령의 출력 비교
while read line; do ... done < <(cmd) 프로세스 출력에서 읽기
cmd > >(tee file) 프로세스에 쓰기

⚙️ Bash 설정

설정 파일

/etc/profile 시스템 전체 로그인 쉘 설정
/etc/bash.bashrc 시스템 전체 대화형 쉘 설정
~/.bash_profile 사용자 로그인 쉘 설정
~/.bashrc 사용자 대화형 쉘 설정
~/.bash_logout 로그아웃 시 실행
source ~/.bashrc bashrc 다시 로드

일반 bashrc 설정

export PATH="$PATH:/new/path" PATH에 추가
export EDITOR="vim" 기본 편집기 설정
alias ll="ls -la" 별칭 생성
alias rm="rm -i" 안전한 rm 별칭
HISTSIZE=10000 메모리 내 히스토리 크기
HISTFILESIZE=20000 히스토리 파일 크기
PS1="\u@\h:\w\$ " 사용자 정의 프롬프트

프롬프트 이스케이프 시퀀스

\u 사용자 이름
\h 호스트명 (짧게)
\H 호스트명 (전체)
\w 현재 디렉토리 (전체)
\W 현재 디렉토리 (기본 이름)
\d 날짜
\t 시간 (24시간)

💡 팁 & 모범 사례

모범 사례

#!/usr/bin/env bash; set -euo pipefail 안전한 스크립트 헤더 (엄격 모드)
"$var" 변수는 항상 따옴표로 감싸기
[[ ]] vs [ ] [[ ]] 선호 (더 많은 기능, 더 안전)
$(cmd) vs `cmd` $() 선호 (중첩 가능, 더 명확)
readonly CONST="value" 상수에는 readonly 사용
local var 함수 내에서 지역 변수 사용
shellcheck script.sh ShellCheck으로 린트 검사

일반 패턴

cmd || { echo "Error"; exit 1; } 에러 처리 패턴
trap "cleanup" EXIT 종료 시 정리
trap "echo Interrupted; exit" INT Ctrl+C 처리
mktemp 임시 파일 안전하게 생성
mktemp -d 임시 디렉토리 안전하게 생성
cd "$(dirname "$0")" 스크립트 디렉토리로 이동