셸 스크립트 기초
쉽게 말하면
자주 치는 명령들을 파일에 순서대로 적어 두고 한 번에 실행하는 것이 셸 스크립트예요. 요리 레시피 카드처럼 한 번 적어 두면 누구든 그대로 따라 실행할 수 있어요.
시험용 정의
셸 스크립트는 명령들을 파일에 적어 한 번에 실행하는 프로그램이다. 첫 줄 #!/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 …; fifor 변수 in 목록; do …; donewhile 조건; do …; donecase $변수 in 패턴1) … ;; *) … ;; esac함수이름() { …; }. 입력 받기는 read 변수, 종료 상태는 exit 숫자.
시험에 이렇게 나와요
- 첫 줄
#!/bin/bash(셔뱅), 위치 매개변수$1, 매개변수 개수$#, 종료 상태$? - 실행하려면
chmod +x후./스크립트또는bash 스크립트
확인 문제
Q1. ./backup.sh /home 7로 실행한 스크립트 안에서 $1, $#의 값은?
- 7, 2
- /home, 2
- /home, 3
- ./backup.sh, 2
정답 보기
2번 /home, 2
$0은 스크립트 이름(./backup.sh), $1은 첫 번째 인자(/home), $2는 두 번째(7), $#은 인자 개수(2, 스크립트 이름은 세지 않음)다.
Q2. 스크립트에 전달된 인자의 개수를 담은 변수는?
- $@
- $#
- $*
- $0
정답 보기
2번 $#
$#이다. $0은 스크립트 이름, $*와 $@는 전달된 인자 전체다.
Q3. 파일이 디렉터리인지 검사하는 test 연산자는?
- -e
- -d
- -r
- -f
정답 보기
2번 -d
-d다. d는 directory다. -f는 일반 파일인지, -e는 있는지, -r은 읽을 수 있는지 검사한다.
Q4. 숫자 비교에서 "크거나 같다"를 뜻하는 연산자는?
- >=
- -le
- -gt
- -ge
정답 보기
4번 -ge
-ge (greater or equal).
Q5. case 문을 닫는 키워드는?
- endcase
- done
- fi
- esac
정답 보기
4번 esac
esac이다(case를 거꾸로). if는 fi로, for·while은 done으로 닫는다.
헷갈리기 쉬운 O·X
스크립트 첫 줄의 #!/bin/bash는 주석이라 아무 의미가 없다.
정답 보기
X 셔뱅. 실행할 인터프리터를 지정한다.
[ $a -eq $b ] 처럼 대괄호 안쪽 양 끝에는 공백이 필요하다.
정답 보기
O [ 는 명령이라 공백으로 구분해야 한다.
$0에는 첫 번째 인자가 들어 있다.
정답 보기
X $0은 스크립트 이름, 첫 인자는 $1.