공든탑앱 열기

셸 스크립트 기초

리눅스마스터 2급 · Shell · 약 11분

쉽게 말하면

자주 치는 명령들을 파일에 순서대로 적어 두고 한 번에 실행하는 것이 셸 스크립트예요. 요리 레시피 카드처럼 한 번 적어 두면 누구든 그대로 따라 실행할 수 있어요.

시험용 정의

셸 스크립트는 명령들을 파일에 적어 한 번에 실행하는 프로그램이다. 첫 줄 #!/bin/bash(셔뱅)로 실행할 셸을 정하고, 변수·조건문·반복문·함수를 쓸 수 있다.

비유로 이해하기

요리 레시피 카드다. 매번 손으로 하던 순서를 카드에 적어 두면 누구든 그대로 따라 한다. 재료(인자)만 바꿔 넣으면 된다.

자세히

실행 방법

chmod +x backup.sh; ./backup.sh실행 권한을 주고 경로로 실행
bash backup.sh실행 권한 없이 bash에 넘겨 실행
source backup.sh (. backup.sh)현재 셸 안에서 실행 (변수가 현재 셸에 남음)

test 연산자 ([ ] 안)

분류연산자
숫자 비교-eq 같다, -ne 다르다, -gt 크다, -ge 크거나 같다, -lt 작다, -le 작거나 같다
문자열= 같다, != 다르다, -z 길이 0, -n 길이 0 아님
파일-e 존재, -f 일반 파일, -d 디렉터리, -r 읽기 가능, -w 쓰기, -x 실행, -s 크기 0보다 큼
논리! 부정, -a 그리고, -o 또는

제어문 모양

if 조건; then …; elif 조건; then …; else …; fi
for 변수 in 목록; do …; done
while 조건; do …; done
case $변수 in 패턴1) … ;; *) … ;; esac
함수이름() { …; }. 입력 받기는 read 변수, 종료 상태는 exit 숫자.

시험에 이렇게 나와요

확인 문제

Q1. ./backup.sh /home 7로 실행한 스크립트 안에서 $1, $#의 값은?

  1. 7, 2
  2. /home, 2
  3. /home, 3
  4. ./backup.sh, 2
정답 보기

2번 /home, 2

$0은 스크립트 이름(./backup.sh), $1은 첫 번째 인자(/home), $2는 두 번째(7), $#은 인자 개수(2, 스크립트 이름은 세지 않음)다.

Q2. 스크립트에 전달된 인자의 개수를 담은 변수는?

  1. $@
  2. $#
  3. $*
  4. $0
정답 보기

2번 $#

$#이다. $0은 스크립트 이름, $*와 $@는 전달된 인자 전체다.

Q3. 파일이 디렉터리인지 검사하는 test 연산자는?

  1. -e
  2. -d
  3. -r
  4. -f
정답 보기

2번 -d

-d다. d는 directory다. -f는 일반 파일인지, -e는 있는지, -r은 읽을 수 있는지 검사한다.

Q4. 숫자 비교에서 "크거나 같다"를 뜻하는 연산자는?

  1. >=
  2. -le
  3. -gt
  4. -ge
정답 보기

4번 -ge

-ge (greater or equal).

Q5. case 문을 닫는 키워드는?

  1. endcase
  2. done
  3. fi
  4. esac
정답 보기

4번 esac

esac이다(case를 거꾸로). if는 fi로, for·while은 done으로 닫는다.

헷갈리기 쉬운 O·X

스크립트 첫 줄의 #!/bin/bash는 주석이라 아무 의미가 없다.

정답 보기

X 셔뱅. 실행할 인터프리터를 지정한다.

[ $a -eq $b ] 처럼 대괄호 안쪽 양 끝에는 공백이 필요하다.

정답 보기

O [ 는 명령이라 공백으로 구분해야 한다.

$0에는 첫 번째 인자가 들어 있다.

정답 보기

X $0은 스크립트 이름, 첫 인자는 $1.

함께 보면 좋은 개념