This lesson is only available in Korean for now.
Lesson 11 of 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 Runs on my virtual Ubuntu server
실행 권한을 주고 실행합니다
bash Runs on my virtual Ubuntu server
셸이 명령을 찾아다니는 폴더 목록 — 여기 없으면 못 찾습니다
bash Runs on my virtual Ubuntu server

① 변수 — 값에 이름 붙이기

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

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

$( ) 안에 명령을 넣으면 그 결과가 값이 됩니다
bash Runs on my virtual Ubuntu server

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

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

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

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

for 는 목록을 하나씩 훑습니다
bash Runs on my virtual Ubuntu server

🎮 스크립트 실험실

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

셸 스크립트 실험실 — 쓰고, 저장하고, 실행합니다
Loading…

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

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

편집 창이 뜹니다. 아래 내용을 붙여 넣고 Ctrl+O → Ctrl+X 하세요
bash Runs on my virtual Ubuntu server
#!/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 Runs on my virtual Ubuntu server
🤔 Check yourself
스크립트 첫 줄의 #!/bin/bash 는 무슨 뜻인가?
🤔 Check yourself
NAME = "쇼핑몰" 이라고 썼더니 오류가 났습니다. 이유는?
🤔 Check yourself
hello.sh 를 만들고 hello.sh 라고 쳤더니 command not found 가 났습니다. 가장 알맞은 해결은?