셸 로드맵 — 스크립트를 배워 직접 짤 수 있게 되는 순서
첫 스크립트를 띄우고(shebang·권한·PATH), 문법 줄기를 한 장으로 잡고, 실전 관용구로 도구를 짜는 데까지 — '셸 스크립트를 배워 직접 짤 수 있게'를 목표로 이 블로그의 셸 글을 큐레이션. 인터랙티브 기본(파이프·리다이렉션)은 전용 글이 없어 정직하게 비워 두고, 환경 관리·일상 속도·세션 지속/원격은 결이 다른 축이라 부록으로 분리.
셸은 매일 쓰지만 대부분 “명령어 몇 개”에서 멈춘다. 이 로드맵의 목표는 딱 하나 — 셸 스크립트를 배워서 직접 짤 수 있게 되는 것이다. 명령을 파일 하나로 묶어 실행하는 첫걸음(시작)부터, 스크립트 문법(줄기), 실전 관용구로 도구를 짜는 데까지 한 줄기로 묶었다. 본인 위치에서 가까운 단계부터 진입하면 된다.
스크립트 작성과 결이 다른 축 — 셸 환경을 코드로 관리하기, 일상 이동·탐색 속도, 세션 지속·원격 환경 — 은 아래 부록으로 분리했다. 스크립트를 배우는 흐름과 별개로, 필요할 때 찾아 들어오면 된다.
먼저 — 이 로드맵의 진짜 선행은 “인터랙티브 셸 사용”인데, 그 글이 아직 없다. 파이프(
\|)·리다이렉션(> >> 2>&1)·명령 치환($(...))·글로빙(*) 같은, 스크립트를 짜기 전에 손에 익어야 할 기본. 이 자리를 다른 글로 억지로 메우지 않고 비워 둔다. 지금은 외부 자료(예: The Linux Command Line)로 채우고, 아래 시작 단계로 넘어오면 된다.
한눈에 보기
시작에서 첫 스크립트를 띄우고, 1·2단계로 문법과 실전을 얹는 게 “스크립트를 짤 수 있게” 되는 학습 줄기다.
| 구역 | 무엇을 다루나 | 성격 |
|---|---|---|
| 시작 | 첫 스크립트 만들고 실행 — shebang·권한·PATH | 줄기 |
| 1단계 | 스크립트 문법 줄기 — 한 장으로 잡기 | 줄기 |
| 2단계 | 실전 관용구로 도구 짜기 | 줄기 |
| 부록 A | 환경 — 초기화 이해·dotfiles·Brewfile·direnv | 다른 축 |
| 부록 B | 일상 이동·탐색 속도 — zoxide 등 | 다른 축 |
| 부록 C | 셸 밖 — 세션·프로세스 지속·원격 환경 | 다른 축 |
시작 — 첫 스크립트 만들고 실행하기
명령을 한 줄씩 치던 데서, 파일 하나로 묶어 실행하는 문턱을 넘는 단계. 여기가 안 잡히면 문법을 배워도 “만든 스크립트가 왜 실행이 안 되지”에서 막힌다.
| 글 | 핵심 |
|---|---|
| 첫 셸 스크립트 만들고 실행하기 — shebang·실행 권한·PATH | shebang이 인터프리터를 고르는 법, chmod +x 실행 권한, ./script.sh의 ./가 필요한 이유, PATH 등록으로 어디서나 실행, permission denied·command not found·CRLF 함정 |
실행 골격을 잡았으면, 이제 그 안을 채우는 문법이다.
1단계 — 스크립트 문법 줄기
스크립트를 짤 수 있게 되는 출발점. 문법 줄기를 한 장으로 잡고, 다음 단계의 각론이 여기에 매달린다. 이 글 하나가 로드맵의 줄기다.
| 글 | 핵심 |
|---|---|
| 셸 스크립트 문법 종합 가이드 (bash 기준, zsh 차이 표기) | 변수·인용·파라미터 확장·[[ ]]·제어 흐름·함수·배열·확장 순서·set -euo pipefail을 한 장에. 2단계 각론이 매달리는 줄기 |
📎 치트시트 · shell · zsh — bash
set옵션·&&/||·잡 관리 / zsh 단축키·glob 빠른 참조 (GitHub)
인용·파라미터 확장·set -euo pipefail을 여기서 손에 익히면, 다음 단계의 실전 글이 “왜 이렇게 쓰나”까지 함께 읽힌다.
2단계 — 실전 관용구로 도구 짜기
문법 줄기를 잡았으면, 한 번 칠 명령을 여러 번 재현 가능하게, 그리고 남이 쓸 수 있는 도구로 만드는 단계. 실제 스크립트를 짜며 부딪히는 관용구들이다.
| 글 | 핵심 |
|---|---|
| 셸로 파일명·문자열 일괄 변경하기 | bash 파라미터 확장·sed·brew rename·find -exec로 다수 파일의 이름·경로·내용을 한 번에. 문법 가이드의 파라미터 확장이 실전으로 + -exec vs \| xargs 갈림길(언제 무엇을 쓰나) |
| CLI 인자 컨벤션 — positional과 –flag는 왜 섞어 쓰나 | 위치 인자와 옵션 플래그의 역할 분담, bash 파싱 최소 패턴, env var와의 비교. “남이 쓸 도구”로 만드는 인터페이스 설계 |
📎 치트시트 · sed-awk — sed 치환·삽입·삭제 / awk 필드·집계 빠른 참조 (GitHub)
여기까지 오면 일회성 명령을 넘어, 인자를 받고 반복을 처리하는 도구다운 스크립트를 직접 짤 수 있다.
이 줄기가 아직 다루지 않는 것 (이 블로그 기준)
“직접 짤 수 있게”의 경계 밖이거나 아직 전용 글이 없어 여기선 비워 둔 것들. 학습하다 부딪히면 이건 다른 자료로 채워야 한다는 표시다.
- 스크립트 디버깅 —
set -x(실행 트레이스),bash -x script.sh, shellcheck 정적 검사. 문법 가이드의set -euo pipefail은 견고성 헤더이지 디버깅 도구가 아니다. 이것도 아직 안 다룬다. - 텍스트 처리 본론 — grep·awk·cut·sort 조합. sed만 파일명·문자열 일괄 변경에 잠깐 나올 뿐, 전용 글이 없다.
부록 A — 환경을 코드로 관리 (다른 축)
여기서부터는 “스크립트를 짜는 법”이 아니라 셸 환경 자체를 이해하고 코드로 관리하는 축이다. 학습 줄기와 분리해 둔다. 새 머신을 받았을 때 가장 크게 갈리는 지점이라 별도로 챙길 값어치가 있다. 초기화 파일이 언제 무엇을 읽는지(이해)부터, 그 설정을 코드로 재현하는 법(관리)까지.
| 글 | 핵심 |
|---|---|
| /etc/profile, /etc/bashrc, ~/.bash_profile, ~/.bashrc | login/non-login × interactive/non-interactive 두 축으로 본 초기화 파일 로딩 순서. zsh 매핑까지. “왜 내 .bashrc가 안 먹히지”의 답 — 환경을 코드로 관리하기 전에 잡아야 할 이해 |
| direnv 사용법 정리 | 디렉토리 진입 시 .envrc로 환경변수 자동 로드. 셸 레벨 direnv vs 앱 레벨 dotenv의 역할 분담 |
| dotfiles를 git 저장소 + 심볼릭 링크로 관리하기 | 설정을 git 한곳에 모으고 홈으로 심볼릭 링크. 멱등 링크 헬퍼, bootstrap 구조, GNU stow 대안, 시크릿 분리 |
| Homebrew Brewfile로 패키지 선언적으로 관리하기 | dump로 덤프 → bundle로 재설치 → cleanup으로 정리 → check로 검증. Brewfile 문법과 dotfiles 버전관리 |
dotfiles를 축으로 깊게 파려면 → dotfiles 로드맵. 위 심링크·Brewfile을 한곳에 모으기 → 설치도 선언적으로 → 머신 분기(런타임 심링크 vs chezmoi 렌더)의 순서로 묶고, chezmoi 사용법·SSH 계정 분리·새 맥 셋업까지 연결한다. 이 부록은 그 로드맵의 입구다.
dotfiles의 bootstrap·멱등 링크 헬퍼는 1~2단계에서 배운 스크립팅이 실제로 쓰이는 지점이기도 하다 — 학습이 끝났다면 스크립트로 자기 환경을 재현하는 첫 실전으로 삼기 좋다. 새 머신 셋업 흐름 전체는 macOS 로드맵의 시스템 운영 갈래와 함께 보면 된다.
부록 B — 일상 이동·탐색 속도 (다른 축)
매일 반복하는 이동·탐색의 마찰을 줄이는 도구 축. 스크립트 학습과 무관하게 삶의 질을 올린다.
| 글 | 핵심 |
|---|---|
| zoxide로 디렉토리 이동 빠르게 — autojump 대체 | 방문 기록(frecency)으로 디렉토리 점프. 셸 연동, z/zi, autojump에서 갈아타기, fzf 연동 |
📎 치트시트 · modern-cli — bat·eza·fd·zoxide·delta·tldr 빠른 참조 (GitHub)
cat·ls·find·grep을 대체하는 모던 CLI(bat·eza·fd·ripgrep)까지 한 번에 보고 싶다면 macOS CLI 개발 도구 모음에 Brewfile 기준으로 갈래별 정리해 두었다.
부록 C — 셸 밖, 세션·프로세스 지속과 원격 (다른 축)
셸을 로컬·상시 연결 밖에서 다룰 때 마주치는 벽. 프로세스를 셸 종료 뒤에도 살리고, 끊기는 원격 세션을 붙들고, 망 분리 환경에서 데이터를 옮기는 — 학습 흐름과 분리해, 같은 상황에서 막혔을 때 직행하는 글들.
| 글 | 핵심 |
|---|---|
| 셸 백그라운드 잡: &, nohup, disown, tmux의 차이 | &로 띄운 프로세스가 셸 종료 시 같이 죽는지 — zsh와 bash 기본이 다르다. 확실히 살리는 4가지 방법. 창을 닫아도 프로세스를 살려 두려 할 때 |
| SSH Broken Pipe Error 해결 방법 | NAT·방화벽 idle timeout으로 끊기는 원인, ServerAliveInterval/ClientAliveInterval, TCPKeepAlive·tmux·mosh 비교 |
| 바이너리 파일을 텍스트로 변환하여 복사 붙여넣기 | 망 분리 환경에서 xxd·base64·certutil로 바이너리를 텍스트화해 옮긴 뒤 복원. split 분할 전송과 해시 무결성 검증 |
📎 치트시트 · ssh · linux-process — ~/.ssh/config·keepalive / 프로세스·백그라운드 잡 빠른 참조 (GitHub)
프로세스를 셸 밖에서 오래 붙들어 두는 이야기는 자연히 터미널 멀티플렉서로 이어진다 — tmux 로드맵과 함께 보면 좋다.
스크립트를 배우려는 사람은 이렇게 읽으면 된다:
- 스크립트를 처음 짜본다면 시작 단계로 실행 골격을 잡고, 1단계 문법 가이드를 줄기로, 2단계 관용구로 실제 도구를 짜 본다.
- 인자 받고 반복 처리하는 도구까지 짤 수 있으면 스크립트 학습의 한 바퀴는 끝이다.
그다음은 취향껏 — 환경을 코드로 재현하고 싶으면 부록 A, 일상 속도를 올리고 싶으면 부록 B, 세션 지속·원격에서 막히면 부록 C로. 터미널 안 공간 관리(세션·창)는 tmux 로드맵, 데스크톱 환경 전반은 macOS 로드맵과 함께 보면 개발환경을 한 번에 다룰 수 있다.