Jump to content

Bourne shell

This is a fully translated article. Click here for more information.
From DawoumWiki, the free Mathematics self-learning
Bourne shell
Original author(s)Stephen Bourne
Developer(s)Bell Telephone Laboratories
Initial release1979; 45 years ago (1979)
Operating systemUnix
TypeUnix shell
License[under discussion]

본 쉘 (Bourne shell 줄여서, sh)은 컴퓨터 운영 시스템에 대해 명령-줄 해석기입니다.

본 쉘은 버전 7 유닉스의 기본 이었습니다. 유닉스-계열 시스템은 심지어 다른 쉘이 대부분의 사용자에 의해 사용될지라도 본 쉘 또는 호환 가능한 쉘에 대한 심볼릭 링크 또는 하드 링크가 될 /bin/sh를 계속 가집니다.

Bell Labs에서 Stephen Bourne에 의해 개발되었으며, 그것은 실행 파일 이름이 같은 이름, sh를 가졌던 Thompson 쉘을 대체했습니다. 그것은 1979년 대학과 대학교에 배포된 버전 7 유닉스에 포함되어 출시되었습니다. 비록 그것이 대화형 명령 인터프리터로 사용되지만, 그것은 역시 스크립팅 언어로도 사용되었고 공통적으로 구조화된 프로그램을 생성하는 것으로 여겨지는 대부분의 기능을 포함하고 있습니다.

그것은 Brian KernighanRob Pike에 의한 The Unix Programming Environment의 출판으로 인기를 얻었습니다. 그것은 쉘을 튜토리얼 형식에서 프로그래밍 언어로 소개한 최초의 상업적으로 출판된 책입니다.

History

Version 7 Unix: the original Bourne shell manual page. PDP-11 simulation with SIMH

Origins

본 쉘에 대한 작업은 1976년에 처음 시작되었습니다.[1] 버전 7 유닉스에서 처음 등장한,[2] 본 쉘은 Mashey 쉘을 대체했습니다.

쉘의 주요 목표 중 일부는 다음이었습니다:[3]

  • 쉘 스크립트필터로 사용되도록 허용하기 위해.
  • 제어 흐름변수를 포함한 프로그래밍 기능을 제공하기 위해.
  • 모든 입력/출력 파일 설명자를 제어.
  • 스크립트 내에서 신호 처리를 제어.
  • 쉘 스크립트를 해석할 때 문자열 길이에 제한 없음.
  • 문자열 인용 메커니즘을 합리화하고 일반화.
  • 환경 메커니즘. 이것은 시작 시 컨텍스트를 설립되고 명시적인 위치 매개변수를 사용하지 않고도 쉘 스크립트에 대해 컨텍스트를 하위 스크립트 (프로세스)에 전달하기 위한 방법을 제공하는 것을 허용했습니다.

Features of the original version

버전 7 유닉스 본 쉘의 기능은 다음을 포함합니다:

  • 스크립트는 파일이름을 사용함으로써 명령으로 호출될 수 있습니다.
  • 대화식 또는 비-대화식으로 사용될 수 있습니다.
  • 명령의 동기 및 비동기 실행을 모두 허용합니다.
  • 입력과 출력 리다이렉션 및 파이프라인 지원합니다.
  • 내장 명령의 집합을 제공합니다.
  • 흐름 제어 구문, 인용 기능 및 함수를 제공합니다.
  • 유형없는 변수
  • 지역과 전역 변수 범위를 제공합니다.
  • 스크립트는 실행 전에 컴파일을 요구하지 않습니다.
  • goto 기능을 가지지 않으므로, 코드 재구성이 요구될 수 있습니다.
  • 역따옴표를 사용하여 명령 치환: `command`.
  • <<를 사용하여 여기 문서를 스크립트 내에 입력 텍스트의 블록을 삽입하기 위해.
  • for ~ do ~ done 루프, 특히 인수에 걸쳐 루프에 대한 $*의 사용, 마찬가지로 목록에 걸쳐 반복하기 위한 for ~ in ~ do ~ done 루프.
  • case ~ in ~ esac 선택 메커니즘, 주로 인수 구문 분석을 지원하기 위해 의도됨.
  • sh는 키워드 매개변수와 내보내기 가능한 변수를 사용하여 환경 변수에 대해 지원을 제공했습니다.
  • 입력 및 출력과 표현 일치 기능을 제어하기 위한 강력한 조항을 포함합니다.

본 쉘은 역시 오류 메시지에 대해 파일 설명자 2>를 사용하는 규칙을 처음으로 사용하여, 데이터로부터 분리된 오류 메시지를 유지함으로써 스크립팅하는 동안 훨씬 더 큰 프로그램 제어를 허용합니다.

Stephen Bourne의 코딩 스타일은 그가 캠브리지 대학에서 작업했던 ALGOL 68C 컴파일러에 대한 그의 경험에 영향을 받았습니다.[2] 프로그램이 작성된 스타일 외에도, Bourne은 공통 유닉스 본 쉘 구문으로 ALGOL 68if ~ then ~ elif ~ then ~ else ~ fi, case ~ in ~ esac and for/while ~ do ~ od" (od 대신 done 사용) 절의 일부를 재사용했습니다. 게다가, – 비록 v7 쉘이 C로 작성되었지만 – Bourne은 일부 매크로의 이점을 C 소스 코드에 ALGOL 68 풍미를 제공하기 위해 취했습니다.[4] 이들 매크로 (finger 명령과 함께 유닉스 버전 4.2BSD로 배포됨)는 International Obfuscated C Code Contest (IOCCC)에 영감을 주었습니다.[5]

Features introduced after 1979

수년에 걸쳐, 본 쉘은 AT&T에서 향상되었습니다. 다양한 변종은 따라서 출시된 각 AT&T 유닉스 버전과 같이 불립니다(일부 중요한 변종은 Version7, SystemIII, SVR2, SVR3, SVR4입니다). 쉘은 버전이 지정되지 않았기 때문에, 쉘을 식별하는 유일한 방법은 기능을 테스트하는 것이었습니다.[6]

1979년 이후 본 쉘 버전의 기능은 다음과 같습니다:[7]

  • 내장 test 명령 – System III shell (1981)
  • 주석 문자로 # – System III shell (1981)
  • 매개변수 치환에서 콜론 "${parameter:=word}" – System III shell (1981)
  • 인수를 갖는 continue – System III shell (1981)
  • 들여쓰기 여기 문서에 대해 cat <<-EOF – System III shell (1981)
  • 함수와 내장 return – SVR2 shell (1984)
  • 내장 unset, echo, type – SVR2 shell (1984)
  • 소스 코드 de-ALGOL68-ized – SVR2 shell (1984)
  • 현대 "$@" – SVR3 shell (1986)
  • 내장 getopts – SVR3 shell (1986)
  • 정리된 매개변수 처리는 재귀적으로 호출 가능한 함수를 허용합니다 – SVR3 shell (1986)
  • 8-비트 clean – SVR3 shell (1986)
  • 작업 제어 – SVR4 shell (1989)
  • 멀티-바이트 지원 – SVR4 shell (1989)

Variants

DMERT shell

이중 다중-환경 실시간(Duplex Multi-Environment Real-Time, 줄여서 DMERT)은 1970년대에 일리노이주 네이퍼빌의 Bell Labs Indian Hill 위치에서 개발된 하이브리드 시분할/실시간 운영 시스템으로 본 쉘 "VERSION sys137 DATE 1978 Oct 12 22:39:57"의 1978 스냅샷을 사용합니다.[citation needed] DMERT 쉘은 통신 산업에서 여전히 사용 중인 3B21D 컴퓨터에서 실행됩니다.[citation needed]

Korn shell

Interaction with pdksh in OpenBSD (default shell)

David Korn에 의해 원래 본 쉘 소스 코드를 기반으로 작성한 Korn 쉘 (ksh)은 본 쉘과 C 쉘 사이의 중간 지점이었습니다.[8] 그것의 구문은 주로 본 쉘에서 가져왔지만, 작업 제어 기능은 C 쉘의 기능과 유사합니다. 원래 콘 쉘의 기능 (도입 연도부터 ksh88로 알려짐)은 POSIX 쉘 표준에 대해 기초로 사용되었습니다. 더 최신 버전, ksh93은 2000년부터 오픈 소스였고 일부 리눅스 배포판에서 사용됩니다. pdksh로 알려진 ksh88의 복제는 OpenBSD에서 기본 쉘입니다.

Schily Bourne Shell

Jörg Schilling의 Schily-Tools은 세 가지 본 쉘 파생-쉘을 포함하고 있습니다.[9]

Relationship to other shells

C shell

C 쉘의 작성자, Bill Joy는 본 쉘을 대화식 사용에 비우호적이라고 비판했었고,[10] Stephen Bourne 자신도 C 쉘의 우수성을 인정한 작업입니다. 본은, 어쨌든, 자신의 쉘이 스크립팅에 뛰어나고 임의의 유닉스 시스템에서 사용할 수 있다고 말했고,[11] Tom Christiansen도 역시 C 쉘을 스크립팅과 프로그래밍에 적합하지 않다고 비판했습니다.[12]

Almquist shells

역사적인 CSRG BSD 출시에서 사용되었을 때, 본 쉘을 둘러싼 저작권 문제로 인해, Kenneth Almquist는 오늘날 일부 BSD 후손과 낮은-메모리 상황에서 사용에 있는 Almquist 쉘로 알려져 있고 BSD 라이선스 아래에서 사용할 수 있는 본 쉘의 복제본을 개발했습니다. Almquist Shell은 리눅스로 이식되었고, 포트는 Debian Almquist shell 또는 dash로 다시 이름지어졌습니다. 이 쉘은 그것의 짝, Bash보다 더 작은 메모리 공간과 함께 표준 sh (및 최신 후손에서, POSIX-표준 sh) 스크립트의 더 빠른 실행을 제공합니다. 그것의 사용은 bashisms을 노출시키는 경향이 있습니다 – sh에서 실행되는 스크립트에서 만들어진 bash-중심 가정입니다.

Other shells

Usage

비록 역사적으로 BSD 기반 시스템은 csh로 작성된 많은 스크립트를 가지지만, 본 쉘은 한때 모든 브랜드 유닉스 시스템에서 표준이었습니다. POSIX sh 구문의 기초로서, 본 쉘 스크립트는 전형적으로 리눅스 또는 다른 유닉스-계열 시스템에서 Bash 또는 dash와 함께 실행될 수 있습니다.

See also

References

  1. ^ https://www.bsdcan.org/2015/schedule/events/612.en.html Stephen Bourne Keynote for BSDCan 2015
  2. ^ a b McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
  3. ^ "The A-Z of Programming Languages: Bourne shell, or sh". computerworld.com.au. Archived from the original on 11 January 2010. Retrieved 6 March 2009.
  4. ^ Bourne, Steve (12 January 1979). "mac.h – Macros used by Bourne to structure C like Algol68C". AT&T Corporation. Retrieved 9 September 2006.
  5. ^ Landon Curt Noll; Simon Cooper; Peter Seebach & Leonid A. Broukhis (2004). "The IOCCC FAQ – Q/A: How did the IOCCC get started?". ioccc.org. Retrieved 9 September 2006.
  6. ^ "what shell is this". www.in-ulm.de.
  7. ^ "traditional Bourne shell family / history and development". www.in-ulm.de.
  8. ^ Korn, David G. (26 October 1994), "ksh - An Extensible High Level Language", Proceedings of the USENIX 1994 Very High Level Languages Symposium, USENIX Association, retrieved 5 February 2015, Instead of inventing a new script language, we built a form entry system by modifying the Bourne shell, adding built-in commands as necessary.
  9. ^ "Schily Bourne Shell - A modern enhanced and POSIX compliant Bourne Shell source maintained by Jörg Schilling". Schily-Tools.
  10. ^ An Introduction to the C shell by Bill Joy.[page needed]
  11. ^ Bourne, Stephen R. (October 1983). "The Unix Shell". BYTE. p. 187. Retrieved 30 January 2015.
  12. ^ Tom Christiansen (28 September 1995). "Csh Programming Considered Harmful". {{cite web}}: |access-date= requires |url= (help); Missing or empty |url= (help)

External links