셸 스크립트

Shell script
FreeB 편집ipfirewall을 구성하기 위한 SD 셸 스크립트

스크립트는 명령줄 [1]인터프리터Unix 쉘에 의해 실행되도록 설계된 컴퓨터 프로그램입니다.셸 스크립트의 다양한 사투리는 스크립트 언어로 간주됩니다.셸 스크립트에 의해 수행되는 일반적인 작업에는 파일 조작, 프로그램 실행 및 텍스트 인쇄가 포함됩니다.환경을 설정하고 프로그램을 실행하며 필요한 정리 또는 로깅을 수행하는 스크립트를 래퍼라고 합니다.

이 용어는 운영체제셸을 실행하는 자동화된 모드를 의미하기도 합니다. 운영체제는 배치 파일(MSDos-Win95 스트림, OS/2), 명령어 프로시저(VMS), 셸 스크립트(Windows NT 스트림 및 4NT와 같은 서드파티 파생 프로그램)를 포함한 이러한 기능의 특정 이름을 사용합니다.프레임 운영체제는 여러 용어와 관련되어 있습니다.

Unix 및 Unix 유사 시스템에 일반적으로 존재하는 셸에는 Korn 쉘, Bourne 쉘 및 GNU Bash가 있습니다.Unix 운영 체제에는 MacOSZsh와 같은 다른 기본 셸이 있을 수 있지만, 이러한 셸은 일반적으로 하위 호환성을 위해 존재합니다.

기능

평.

코멘트는 셸에 의해 무시됩니다.보통 해시 기호로 시작합니다.#),[2] 행의 마지막까지 속행합니다.

스크립트 언어 설정 가능

shebang(해시방)은 파일 실행에 사용할 인터프리터를 결정하기 위해 시스템에서 사용하는 특수한 종류의 코멘트입니다.shebang은 파일의 첫 번째 줄이어야 하며 "로 시작해야 합니다.#!".[2] Unix와 유사한 운영체제에서 " 뒤에 오는 문자"#!프리픽스는 스크립트를 [3]해석하는 실행 프로그램의 경로로 해석됩니다.

숏컷

셸 스크립트는 특별한 환경 설정, 명령어옵션 또는 사후처리가 자동으로 적용되는 편리한 시스템명령어를 제공할 수 있지만 새로운 스크립트는 여전히 완전히 정상적인 Unix 명령어로 기능할 수 있습니다.

예를 들어 파일을 나열하는 명령어인 ls 버전을 생성하여 명령어 이름을 단축하여l이 파일은 보통 사용자의 에 저장됩니다.bin로 명기하다./home/username/bin/l및 기본 명령어옵션 세트가 미리 준비되어 있습니다.

#!/bin/sh LC_COLATE=C LS - FCAS "$@"

여기서 첫 번째 행은 shebang을 사용하여 스크립트의 나머지 부분을 실행해야 하는 인터프리터를 나타내고 두 번째 행은 파일 형식 표시기, 열, 모든 파일(누락되지 않음) 및 블록 크기 옵션을 사용하여 목록을 작성합니다.LC_COLLATE=C는 이름의 구두점을 무시하는 부작용으로 일반 파일 이름과 함께 닷 파일을 혼합하지 않고 대소문자를 함께 접지 않도록 기본 대조 순서를 설정합니다(일반적으로 닷 파일은 다음과 같은 옵션이 있는 경우에만 표시됩니다).-a사용) 및"$@"에 지정된 파라미터의 원인이 됩니다.lls에 대한 파라미터로 통과시키기 위해 ls에 알려진 모든 일반 옵션 및 기타 구문을 계속 사용할 수 있습니다.

그 후 사용자는 간단하게l를 참조해 주세요.

숏컷으로 사용할 수 있는 셸 스크립트의 또 다른 예로는 특정 디렉토리 내의 모든 파일과 디렉토리의 목록을 인쇄하는 것입니다.

#!/bin/sh clear ls -al

이 경우 셸 스크립트는 #!/bin/sh의 일반 시작 행으로 시작합니다.그 후 스크립트는 clear 명령어를 실행하여 다음 행으로 넘어가기 전에 단말기에서 모든 텍스트를 지웁니다.다음 행은 스크립트의 주요 기능을 나타냅니다.ls -al 명령어는 스크립트를 실행하는 디렉토리 내의 파일과 디렉토리를 나열합니다.ls 명령어속성은 사용자의 요구를 반영하도록 변경할 수 있습니다.

주의: 구현에 clear 명령어가 없는 경우 clr 명령어를 대신 사용해 보십시오.

배치 작업

셸 스크립트를 사용하면 사용자가 시퀀스의 각 단계를 트리거할 때까지 기다리지 않고 명령줄 인터페이스에서 수동으로 입력한 여러 명령을 자동으로 실행할 수 있습니다.예를 들어, 3개의 C 소스 코드 파일이 있는 디렉토리에서는 이들 파일에서 최종 프로그램을 구축하기 위해 필요한4개의 명령어를 수동으로 실행하는 대신 POSIX 준거 셸용 스크립트를 작성할 수 있습니다.여기서 설명하는 것은 다음과 같습니다.build디렉토리에 보관하면 다음과 같이 자동으로 컴파일 됩니다.

#!/bin/sh printf 'displayed...\n' cc -c foo.c cc -c bar.c cc -c qux.c cc -o myprog foo.o bar.o qux.o printf '완료.\n'

이 스크립트를 사용하면 사용자는 편집 중인 파일을 저장하고 편집기를 일시 중지한 후 실행할 수 있습니다../build업데이트된 프로그램을 만들고 테스트한 다음 편집기로 돌아갑니다.그러나 1980년대 이후 이러한 유형의 스크립트는 프로그램 구축에 특화된 make와 같은 유틸리티로 대체되었습니다.

일반화

격리된 태스크에서는 단순한 배치 작업이 드물지 않지만 셸 루프, 테스트 및 변수를 사용하면 사용자에게 훨씬 더 많은 유연성을 제공할 수 있습니다.JPEG 이미지를 PNG 이미지로 변환하기 위한 POSIX sh 스크립트는 각 이미지가 스크립트 내에 나열되는 대신 명령줄에서 와일드카드를 통해 이미지 이름을 지정할 수 있습니다.이 경우 일반적으로 다음과 같은 파일에 저장됩니다./home/username/bin/jpg2png

#!/bin/sh for jpg; # 주어진 파일 이름 대신 $jpg를 사용합니다. 차례png=${jpg%입니다.jpg.png #는 .jpg를 .png printf 'converting %s...로 대체하여 파일 이름의 PNG 버전을 구축합니다.사용자가 스크립트를 실행하는 \n의"달러 jpg"# 출력 상황 정본 다음#사용하여 임시 파일 mvjpg.to.png"달러 png")만약 한 올바른 이름에 임시 PNG이미지 rename 다른#... 그렇지 않고 대본 printf 을에서 출구,&불평하 2'jpg2png의 PNG를 만들기 위해(이미지 매직에 의해 제공되)변환하면"달러 jpg"jpg.to.png;변환:e.rror:f파일 출력은 "jpg.to.png"에 저장되어 있습니다.\n' exit 1 fi # "if" 테스트 구성 종료 # "for" 루프 인쇄의 종료 "all conversions successful\n" # 사용자에게 좋은 소식을 알립니다.

jpg2pngJPEG 이미지로 가득 찬 디렉토리 전체에서 명령어를 실행할 수 있습니다./home/username/bin/jpg2png *.jpg

프로그래밍

또한 많은 최신 셸은 제어 흐름 구조, 변수, 주석, 배열, 서브루틴 등 보다 정교한 범용 프로그래밍 언어에서만 볼 수 있는 다양한 기능을 제공합니다.이러한 기능을 사용할 수 있기 때문에 상당히 정교한 애플리케이션을 셸 스크립트로 작성할 수 있습니다.그러나 대부분의 셸 언어는 데이터 입력 시스템, 클래스, 스레드화, 복잡한 수학 및 기타 일반적인 풀 언어 기능을 거의 또는 전혀 지원하지 않으며 일반적으로 컴파일된 코드나 인터프리터 언어보다 훨씬 느립니다.

표준 Unix sed 및 awk는 셸 프로그래밍을 위한 추가 기능을 제공합니다.Perl은 Tcl과 같은 다른 스크립트 언어와 마찬가지로 셸 스크립트에 포함될 수도 있습니다.Perl과 Tcl에는 그래픽 툴킷도 포함되어 있습니다.

일반적인 POSIX 스크립트 언어

UNIX, 리눅스 및 POSIX 호환 운영 체제 설치에서 일반적으로 볼 수 있는 스크립트 언어에는 다음이 포함됩니다.

  • KornShell (kshksh88, Korn Shell '93 등 몇 가지 가능한 버전입니다.
  • Bourne 쉘(sh가장 오래된 셸 중 하나)는 여전히 일반적으로 사용되고 있습니다.
  • C 쉘(csh)
  • GNU Bash (bash)
  • tclshTcl/Tk 프로그래밍 언어의 주요 컴포넌트인 셸.
  • GUI 기반의 Tcl/Tk 쉘이 필요합니다.

리모트 셸

C 셸과 Tcl 셸은 상기 프로그래밍 언어의 구문과 상당히 유사하며, Korn 셸과 Bash는 ALGOL 언어에 기반한 Bourne 셸의 발전이며,[4] 다른 많은 요소도 추가되어 있습니다.한편, awk, sed, grep, BASIC, Lisp, C 등의 다양한 셸과 툴이 Perl 프로그래밍 [5]언어에 기여했습니다.

머신 또는 다운로드 및/또는 구입에 사용할 수 있는 기타 셸은 다음과 같습니다.

Python, Ruby, C, Java, Perl, Pascal, Rexx 등을 기반으로 한 셸과 같은 관련 프로그램.다양한 형태로도 폭넓게 이용할 수 있습니다.또 다른 일반적인 셸은 오래된 셸입니다.osh매뉴얼 페이지에 "Sixth Edition [6]UNIX의 표준 명령어인터프리터의 확장 하위 호환 포트"라고 기재되어 있습니다.

기타 스크립트 언어

많은 강력한 스크립트 언어가 일반 셸 스크립트로 쉽게 처리하기에는 너무 크거나 복잡한 태스크에 도입되었지만 스크립트의 장점이 바람직하고 완전한 컴파일된 프로그래밍 언어의 개발 오버헤드가 불리할 수 있습니다.스크립트 언어와 고급 프로그래밍 언어를 구분하는 구체적인 내용은 자주 논의되지만 일반적으로 스크립트 언어는 인터프리터가 필요한 언어입니다.

라이프 사이클

셸 스크립트는 종종 소프트웨어 개발의 초기 단계로서 기능하며, 나중에 다른 기본 구현으로 변환되는 경우가 많습니다. 가장 일반적으로 Perl, Python 또는 C로 변환됩니다.인터프리터 디렉티브를 사용하면, 실장의 상세를 파일명의 확장자로 공개하는 것이 아니고, 스크립트내에 완전하게 숨길 수 있습니다.또, 최종 사용자에게의 영향 없이, 다른 언어로 심리스하게 재실장할 수 있습니다.

파일 확장자가 ".sh"인 파일은 보통 일종의 셸 스크립트이지만 대부분의 셸 스크립트에는 파일 [7][8][9][10]확장자가 없습니다.

장점과 단점

셸 스크립트를 작성하는 가장 큰 장점은 명령줄에서 직접 입력된 명령어와 구문이 완전히 동일하다는 것입니다.스크립트가 다른 언어로 작성되거나 컴파일된 언어가 사용된 경우처럼 프로그래머는 완전히 다른 구문으로 전환할 필요가 없습니다.

셸 스크립트를 작성하는 것이 동등한 코드를 다른 프로그래밍 언어로 작성하는 것보다 훨씬 빠릅니다.프로그램 또는 파일을 쉽게 선택할 수 있고 빠른 시작 및 대화형 디버깅이 있습니다.셸 스크립트를 사용하면 기존 프로그램에 대한 시퀀싱 및 의사결정 링크를 제공할 수 있습니다.또, 적당한 사이즈의 스크립트에서는, 컴파일 스텝이 없는 것이 장점입니다.인터프리터티브 실행을 통해 스크립트에 디버깅코드를 쉽게 쓰고 다시 실행하여 버그를 검출하고 수정할 수 있습니다.전문가 이외의 사용자는 스크립팅을 사용하여 프로그램 동작을 맞춤화할 수 있습니다.또한 셸 스크립팅에서는 멀티프로세싱의 범위가 한정되어 있습니다.

한편 셸 스크립팅은 비용이 많이 드는 오류가 발생하기 쉽습니다.다음과 같은 부주의한 입력 오류rm -rf * /(의도의 범위 내)rm -rf */)는 Unix 커뮤니티의 민속입니다.이 커맨드는, 1개의 스페이스를 더하면, 현재의 디렉토리에 격납되어 있는 모든 서브 디렉토리를 삭제하는 커맨드에서, 파일 시스템의 루트 디렉토리의 모든 것을 삭제하는 커맨드로 변환됩니다.유사한 문제가 발생할 수 있습니다.cp그리고.mv위험한 무기로의 오남용과>redirect는 파일 내용을 삭제할 수 있습니다.이것은 많은 UNIX 명령어가 이름에서1글자밖에 차이가 나지 않기 때문에 더욱 문제가 됩니다.cp,cd,dd,df,기타.

또 다른 중요한 단점은 실행 속도가 느리고 실행되는 거의 모든 셸 명령에 대해 새로운 프로세스를 시작해야 한다는 것입니다.효율적인 필터 명령이 대부분의 작업을 수행하는 파이프라인을 설정함으로써 스크립트의 작업을 수행할 수 있는 경우 속도 저하는 완화되지만 복잡한 스크립트는 일반적으로 동등한 작업을 수행하는 기존 컴파일 프로그램보다 몇 배 느립니다.

플랫폼 간 호환성 문제도 있습니다.창시자인 래리 월은 "쉘 [quote citation needed]스크립트보다 셸을 이식하는 것이 더 쉽다"고 유명한 글을 썼다.

마찬가지로, 더 복잡한 스크립트는 셸 스크립트 언어 자체의 제한에 직면할 수 있습니다.이 제한으로 인해 품질 코드를 기술하기가 어려워집니다.또, 원래의 셸 언어의 문제를 개선하기 위해서, 다양한 셸에 의한 확장은 문제를 악화시킬 [11]수 있습니다.

일부 스크립트 언어를 사용하는 것의 많은 단점은 언어 구문 또는 구현 내의 설계 결함으로 인해 발생하며 텍스트 기반 명령줄 사용으로 인해 발생할 필요는 없습니다. 다른 셸 프로그래밍 언어 또는 Scsh(Scheme 사용)와 같은 본격적인 언어를 사용하는 셸도 다수 있습니다.

스크립트 언어 간의 상호 운용성

스크립트 언어마다 많은 공통 요소가 공유될 수 있습니다.주로 POSIX 기반이기 때문입니다.또한 일부 셸은 다른 셸을 에뮬레이트하는 모드를 제공합니다.이를 통해 어떤 스크립트 언어로 작성된 셸 스크립트를 다른 스크립트로 변경할 수 있습니다.

예를 들어 Bash는 Bourne 쉘과 동일한 문법과 구문을 제공하며 POSIX 준거 [12]모드도 제공합니다.따라서 Bourne 쉘용으로 작성된 대부분의 셸 스크립트는 BASH에서 실행할 수 있지만 BASH에는 없는 확장기능이 있기 때문에 그 반대의 경우도 있습니다.이러한 기능을 [13]배시즘이라고 합니다.

다른 운영 체제에서의 셸 스크립팅

시그윈은 MKS툴킷, Interix(며 MicrosoftWindows서비스에서 유닉스에 사용할 수 있) 같은 상호 운영성 소프트웨어, 해밀턴 C셸 UWIN(AT&T유닉스 윈도우를 위한)과 다른 사람들 수 있는Unix 껍질 프로그램이 운영에 기계를 실행하는 WindowsNT와 그 후계자들의 손실의 기능에 MS-DOS-Windows 95지점, w.퇴이전 버전의 MKS Toolkit OS/2와 동일합니다.Windows 타입의 operating system용의 DCL 실장은, XLNT 외에, 커맨드 셸, Windows 스크립트 호스트, CGI 프로그래밍과 함께 사용되는 복수의 스크립트 언어 패키지입니다.Mac OS X 이후 버전도 Unix와 유사합니다.[14]

상기의 툴에 가세해, Windows 2000 까지의 Windows NT operating system 시리즈의 대응하는 환경 서브 시스템에서도, POSIX 와 OS/2 의 기능을 사용할 수 있습니다.MS-DOS 서브시스템이라고 불리는 세 번째 16비트 서브시스템은 이러한 운영체제에 부속된 Command.com을 사용하여 앞서 설명한 MS-DOS 배치파일을 [15]실행합니다.

대체 콘솔인 4DOS, 4OS2, FreeDOS, Peter Norton의 NDOS 및 4NT / Take 명령어는 각각 Windows NT 스타일의 cmd.exe, MS-DOS/Windows 95 배치 파일(Command.com에서 실행), OS/2의 cmd.exe 및 4NT에서 실행)에 기능을 추가하여 셸을 더욱 강화합니다.사전 설치된 3개의 엔진, VBScript, JScript, VBA 및 여기에 수많은 서드파티 엔진을 추가할 수 있으며 Rexx, Perl, Python, Ruby, Tcl은 4NT 및 관련 프로그램에 사전 정의된 기능을 가지고 있습니다.PC DOS는 MS-DOS와 매우 유사하지만 DR DOS는 더 다릅니다.이전 버전의 Windows NT는 OS/2 서브시스템에서 최신 버전의 4OS2를 실행할 수 있습니다.

스크립트 언어는 정의상 확장 가능합니다.예를 들어 MS-DOS/Windows 95/98 및 Windows NT 유형 시스템에서는 셸/배치 프로그램이 KiXtart, QBasic, 다양한 BASIC, Rexx, Perl Python 구현과 같은 도구와 설치된 엔진을 호출할 수 있습니다.Unix 및 기타 POSIX 준거 시스템에서는 셸 스크립트의 문자열 및 수치 처리 능력을 확장하기 위해 awksed를 사용합니다.도구 명령 언어, 펄, Rexx, 그리고 Python및 기능성 소켓과 다른 연결 기능, 튼튼한 텍스트 처리, wo 같은 껍질 언어에서 이용할 수 없는 추가할 수 있는 속도 병목 현상(C, 포트란, 어셈블리 언어&c가 훨씬 빠르게 아직도)을 내포하게 될 셸 스크립트 기능을 절차와 코드로 사용될 수 있는 그래픽 툴킷을 가지고 있다.rking 호출 스크립트에 이러한 기능, 자기 쓰기 및 자기 인식 코드, 재귀, 다이렉트 메모리 액세스, 다양한 종류의 정렬 등이 없는 경우, 메인 스크립트에서는 어렵거나 불가능한 경우 등이 있습니다.Visual Basic for Applications 및 VBScript를 사용하여 스프레드시트, 데이터베이스, 모든 유형의 스크립트 가능 프로그램, 통신 소프트웨어, 개발 도구, 그래픽 도구 및 컴포넌트 개체 모델을 통해 액세스할 수 있는 기타 소프트웨어 등을 제어하고 통신할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Kernighan, Brian W.; Pike, Rob (1984), "3. Using the Shell", The UNIX Programming Environment, Prentice Hall, Inc., p. 94, ISBN 0-13-937699-2, The shell is actually a programming language: it has variables, loops, decision-making, and so on.
  2. ^ a b Johnson, Chris (2009).[1] Pro Bash 프로그래밍: 2019년 9월 27일 Linux Shell, Apress, Retrieved 스크립팅.ISBN 9781430219989
  3. ^ "exec(3p) – POSIX Programmer's Manual". Retrieved 2020-07-24.
  4. ^ UNIX 쉘의 예(pp 7-10),
  5. ^ Programming Perl, 제5판, 서문
  6. ^ "osh - manned.org". manned.org. Retrieved 2019-01-16.
  7. ^ Robbins, Arnold; Hannah, Elbert; Lamb, Linda (2008). Learning the vi and Vim Editors. p. 205. ISBN 9781449313258.
  8. ^ Easttom, Chuck (2012). Essential Linux Administration:: A Comprehensive Guide for Beginners. p. 228. ISBN 978-1435459571.
  9. ^ Kumari, Sinny (November 23, 2015). Linux Shell Scripting Essentials. Packt Publishing Ltd. ISBN 9781783552375. Retrieved May 7, 2017. Rather than using a file extension for shell scripts, it's preferred to keep a filename without extension and let an interpreter identify the type by looking into shebang(#!).
  10. ^ Taylor, Dave; Perry, Brandon (December 16, 2016). Wicked Cool Shell Scripts, 2nd Edition: 101 Scripts for Linux, OS X and UNIX Systems. No Starch Press. ISBN 9781593276027. Retrieved May 7, 2017. Shell scripts don't need a special file extension, so leave the extension blank (or you can add the extension .sh if you prefer, but this isn't required.
  11. ^ Christiansen, Tom. "Csh Programming Considered Harmful".
  12. ^ "Major Differences From The Bourne Shell".
  13. ^ "24 Bashism To Avoid for POSIX-Compliant Shell Scripts".
  14. ^ MSDN[not specific enough to verify]
  15. ^ Windows NT 4 워크스테이션 리소스 키트

외부 링크