셸 스크립트

셸 스크립트(shell script)는 셸이나 명령 줄 인터프리터에서 돌아가도록 작성되었거나 한 운영 체제를 위해 쓰인 스크립트이다. 단순한 도메인 고유 언어로 여기기도 한다. 셸 스크립트가 수행하는 일반 기능으로는 파일 이용, 프로그램 실행, 문자열 출력 등이 있다.

셸 스크립트라는 말은 유닉스 셸을 위해 쓰인 스크립트를 말하는 반면, command.com(도스)과 cmd.exe (윈도우) 명령 줄 스크립트는 보통 배치 파일이라고 불리지만 이 글에는 두 개의 속성 모두를 논한다.

.sh라는 파일 확장자를 가진 파일이 특정 종류의 셸 스크립트를 가리키는 것이 보통이지만, 대부분의 셸 스크립트는 파일 확장자를 지니지 않는다.

기능

바로가기 
파일을 나열하는 명령어인 ls 버전을 만드는 예는 다음과 같다.
#!/bin/sh
LC_COLLATE=C ls -FCas "$@"

여기서 셔뱅은 어느 인터프리터가 스크립트의 나머지 부분을 실행할지를 가리킨다.

다른 예는 모든 파일과 디렉터리의 목록을 출력하는 바로가기로 사용할 수 있다.
#!/bin/sh

clear
ls -al

배치 잡 
셸 스크립트를 사용하면 명령 줄 인터페이스에 수동으로 입력해야 하는 여러 명령을 자동으로 연속 실행시킬 수 있으며, 사용자가 각 단계의 시퀀스마다 일일이 기다릴 필요가 없다.
#!/bin/csh
echo compiling...
cc -c foo.c
cc -c bar.c
cc -c qux.c
cc -o myprog foo.o bar.o qux.o
echo done.

일반화 
단순한 배치 잡들은 분리된 작업에 일반적이지만 반복, 테스트, 변수들은 사용자에게 훨씬 더 나은 유연성을 제공한다. JPEG 그림을 PNG로 변환하는 Bash(유닉스 셸의 하나) 스크립트는 다음과 같다.
#!/bin/bash
for jpg; do                                  # use $jpg in place of each filename given, in turn
    png="${jpg%.jpg}.png"                    # construct the PNG version of the filename by replacing .jpg with .png
    echo converting "$jpg" ...               # output status info to the user running the script
    if convert "$jpg" jpg.to.png ; then      # use the convert program (common in Linux) to create the PNG in a temp file
        mv jpg.to.png "$png"                 # if it worked, rename the temporary PNG image to the correct name
    else                                     # ...otherwise complain and exit from the script
        echo 'jpg2png: error: failed output saved in "jpg.to.png".' >&2
        exit 1
    fi                                       # the end of the "if" test construct
done                                         # the end of the "for" loop
echo all conversions successful              # tell the user the good news
exit 0

다른 스크립트 언어

장단점

장점 
셸 스크립트를 기록하는 것은 다른 프로그래밍 언어의 같은 코드로 쓰인 것보다 훨씬 더 빠른 경우가 많다. 다른 해석 언어에 비해, 셸 스크립트는 컴파일 단계가 없기 때문에 스크립트는 디버깅을 하는 동안 빠르게 실행할 수 있다.

단점 
셸 스크립트를 사용함으로써 몇 가지 중대한 단점이 존재한다.
 한 가지 단점으로는 실행되는 각 명령에 대한 잠재적으로 새로운 하부 프로세스의 수많은 필요에 따라 속도가 느려질 수 있다.
 단순 sh 스크립트는 다양한 종류의 유닉스, 리눅스, BSD 운영 체제, therof 버전, 시스템 유틸리티와 잘 호환된다는 장점이 있지만 더 복잡한 셸 스크립트는 셸, 유틸리티, 다른 필수 요소 간의 약간의 차이가 많은 경우 실패할 가능성이 있다. 래리 월은 다음과 같은 유명한 말을 남겼다: "셸 스크립트보다 셸을 포팅하는 게 더 쉽다"
 이와 비슷하게, 더 많은 복잡한 스크립트들은 셸 스크립트 언어 자체의 제한 안에서 실행할 수 있다. 이러한 제한 때문에 다양한 셸이 문제를 개선할 목적으로 고품질의 코드와 확장을 기록하기 힘들 수 있다.

같이 보기 
 윈도우 파워셸
 윈도우 스크립트 호스트
 셔뱅
 스크립트 언어

각주

외부 링크 

 An Introduction To Shell Programming by Greg Goebel
 UNIX / Linux shell scripting tutorial by Steve Parker
 Shell Scripting Primer (Apple) 
 What to watch out for when writing portable shell scripts by Peter Seebach
 Free Unix Shell scripting books

스크립트 언어