11강 / 20강

셸 스크립트 — 명령을 파일에 담기

손으로 하던 일을 컴퓨터에게 넘기기

셸 스크립트 — 명령을 파일에 담기
매일 치던 명령을 파일 하나로 묶습니다.

매일 아침 서버에 들어가 이 다섯 줄을 칩니다.

cd /home/jit/shop
tar -czf backup.tar.gz data/
mv backup.tar.gz /var/backups/
systemctl status shop
df -h

일주일이면 35줄, 한 달이면 150줄을 손으로 칩니다. 게다가 어느 날은 순서를 헷갈리고, 어느 날은 한 줄을 빼먹어요.

해결책은 간단합니다. 파일에 적어 두고 그 파일을 실행하는 것. 그게 셸 스크립트입니다.

스크립트의 세 가지 준비물

#!/bin/bash셔뱅(shebang)첫 줄. "이 파일은 bash로 실행해"
chmod +x실행 권한7강에서 배운 그것
./파일.sh실행./ 를 꼭 붙여야 합니다
서버에 이미 들어 있는 예제 스크립트
bash 내 가상 Ubuntu 서버에서 실행
실행 권한을 주고 실행합니다
bash 내 가상 Ubuntu 서버에서 실행
셸이 명령을 찾아다니는 폴더 목록 — 여기 없으면 못 찾습니다
bash 내 가상 Ubuntu 서버에서 실행

① 변수 — 값에 이름 붙이기

대입할 때는 $ 없이, 꺼내 쓸 때는 $ 를 붙입니다. 그리고 등호 양옆에 공백을 넣으면 안 됩니다. 초보자가 가장 많이 걸리는 함정이에요.

변수 이름은 영문자·숫자·밑줄만 쓸 수 있습니다. 한글 이름은 안 돼요 (이름=값 은 command not found 가 납니다). 대신 주석과 출력 글자는 한글로 얼마든지 쓸 수 있습니다.

$( ) 안에 명령을 넣으면 그 결과가 값이 됩니다
bash 내 가상 Ubuntu 서버에서 실행

② 조건문 — 상황을 보고 갈라지기

백업 스크립트라면 "폴더가 있으면 백업하고, 없으면 만들고"처럼 판단해야 하죠.

[ ] 안이 조건입니다. 대괄호 양옆의 공백을 빠뜨리지 마세요
bash 내 가상 Ubuntu 서버에서 실행
-f 파일파일이 있나-d 는 폴더가 있나
-e 경로뭐라도 있나-x 는 실행할 수 있나
-z "$값"비어 있나-n 은 비어 있지 않나
$a -eq $b숫자가 같나-lt 작다 · -gt 크다
"$a" = "$b"글자가 같나숫자와 글자는 비교법이 다릅니다

③ 반복문 — 여러 개를 한꺼번에

for 는 목록을 하나씩 훑습니다
bash 내 가상 Ubuntu 서버에서 실행

🎮 스크립트 실험실

직접 써서 실행해 보세요. 예제를 눌러 불러온 뒤 고쳐 봐도 좋습니다. 여기서 쓴 스크립트는 여러분의 가상 서버에서 진짜로 실행됩니다.

셸 스크립트 실험실 — 쓰고, 저장하고, 실행합니다
불러오는 중…

진짜 쓸모 있는 스크립트를 만들어 봅시다

쇼핑몰을 백업하는 스크립트입니다. 19강에서 이걸 매일 새벽 3시에 자동 실행되게 만들 거예요.

편집 창이 뜹니다. 아래 내용을 붙여 넣고 Ctrl+O → Ctrl+X 하세요
bash 내 가상 Ubuntu 서버에서 실행
#!/bin/bash
# 쇼핑몰 백업 스크립트

SRC=/home/jit/shop
DEST=/home/jit/backups
DATE=$(date +%Y%m%d)

if [ ! -d "$DEST" ]; then
  mkdir -p "$DEST"
  echo "보관함을 만들었습니다: $DEST"
fi

tar -czf "$DEST/shop-$DATE.tar.gz" "$SRC"
echo "백업 완료: shop-$DATE.tar.gz"
ls -lh "$DEST"
실행 권한을 주고 돌려 봅니다
bash 내 가상 Ubuntu 서버에서 실행
🤔 확인 문제
스크립트 첫 줄의 #!/bin/bash 는 무슨 뜻인가?
🤔 확인 문제
NAME = "쇼핑몰" 이라고 썼더니 오류가 났습니다. 이유는?
🤔 확인 문제
hello.sh 를 만들고 hello.sh 라고 쳤더니 command not found 가 났습니다. 가장 알맞은 해결은?