{{위키데이터 속성 추적}}
[[파일:FreeBSD 10 vi RC Firewall.png|섬네일|[[ipfirewall]] 구성을 위해 [[FreeBSD]] 셸 스크립트를 편집하고 있다.]]
'''셸 스크립트'''(shell script)는 [[셸]]이나 [[명령 줄 인터프리터]]에서 돌아가도록 작성되었거나 한 [[운영 체제]]를 위해 쓰인 [[스크립트 언어|스크립트]]이다. 단순한 [[도메인 고유 언어]]로 여기기도 한다. 셸 스크립트가 수행하는 일반 기능으로는 파일 이용, 프로그램 실행, 문자열 출력 등이 있다.

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

.sh라는 [[파일 확장자]]를 가진 파일이 특정 종류의 셸 스크립트를 가리키는 것이 보통이지만, 대부분의 셸 스크립트는 파일 확장자를 지니지 않는다.<ref>
Arnold Robbins, Elbert Hannah, Linda Lamb.
[https://books.google.com/books?id=J5nKVVg5YHAC "Learning the vi and Vim Editors"].
2008.
p. 205.
</ref><ref>
Chuck Easttom.
[https://books.google.com/books?id=zZYLAAAAQBAJ "Essential Linux Administration:: A Comprehensive Guide for Beginners"].
2012.
p. 228.
</ref>

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

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

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

clear
ls -al
</syntaxhighlight>
=== 배치 잡 ===
셸 스크립트를 사용하면 명령 줄 인터페이스에 수동으로 입력해야 하는 여러 명령을 자동으로 연속 실행시킬 수 있으며, 사용자가 각 단계의 시퀀스마다 일일이 기다릴 필요가 없다.
<syntaxhighlight lang="bash">
#!/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.
</syntaxhighlight>
=== 일반화 ===
단순한 배치 잡들은 분리된 작업에 일반적이지만 반복, 테스트, 변수들은 사용자에게 훨씬 더 나은 유연성을 제공한다. JPEG 그림을 PNG로 변환하는 [[Bash]]([[유닉스 셸]]의 하나) 스크립트는 다음과 같다.
<syntaxhighlight lang="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
</syntaxhighlight>

== 다른 스크립트 언어 ==
{{본문|스크립트 언어}}

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

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

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

== 각주 ==
{{각주}}

== 외부 링크 ==
{{위키책|:en:Shell Programming|셸 프로그래밍}}
* [http://www.faqs.org/docs/air/tsshell.html ''An Introduction To Shell Programming'' by Greg Goebel]
* [http://steve-parker.org/sh/sh.shtml ''UNIX / Linux shell scripting tutorial'' by Steve Parker]
* [http://developer.apple.com/mac/library/documentation/OpenSource/Conceptual/ShellScripting/ ''Shell Scripting Primer'' (Apple)] {{웨이백|url=http://developer.apple.com/mac/library/documentation/OpenSource/Conceptual/ShellScripting/ |date=20100901073633 }}
* [https://web.archive.org/web/20090324070111/http://www.linux.com/articles/34658 ''What to watch out for when writing portable shell scripts'' by Peter Seebach]
* [http://freebookcentre.net/UnixCategory/Free-Unix-Shell-Programming-Books-Download.html Free Unix Shell scripting books]

{{토막글|소프트웨어}}

[[분류:스크립트 언어]]