본 셸
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
본 셸은 1976년 벨 연구소의 스티븐 본이 개발한 셸로, PWB 셸을 대체하고 톰슨 셸을 개선하기 위해 설계되었다. 셸 스크립트를 필터로 사용하고, 제어 흐름과 변수를 포함한 프로그래밍 기능을 제공하며, 파일 디스크립터, 신호 관리, 문자열 길이 제한, 환경 변수 등을 제어하는 데 중점을 두었다. 이후 다양한 변형이 출시되었으며, Korn 셸, Bash, Z 셸 등 다른 셸에 영향을 미쳤다. 본 셸은 모든 상용 유닉스 시스템에서 표준으로 사용되며, C 셸에 비해 대화형 사용의 불편함, C 언어와의 문법적 차이, 식 평가 기능의 부재 등의 비판을 받기도 했다.
더 읽어볼만한 페이지
- POSIX - 오픈 그룹
오픈 그룹은 다양한 기술 공급업체, 구매자, 정부 기관을 포함하는 국제 컨소시엄으로, 표준 개발, 인증 프로그램 운영, TOGAF와 같은 IT 아키텍처 프레임워크 제공 및 UNIX 상표 권리 보유를 통해 개방형 IT 표준 개발 및 보급에 기여한다. - POSIX - 단일 유닉스 규격
단일 유닉스 규격은 여러 회사의 소프트웨어 이식 비용 절감을 위해 시작된 운영 체제 인터페이스 표준이며, X/Open Company가 발표하고 POSIX 등과 통합되어 UNIX 인증 마크를 제공한다. - 1977년 소프트웨어 - BSD
BSD는 캘리포니아 대학교 버클리에서 시작된 유닉스 계열 운영 체제로, 오픈 소스 라이선스인 BSD 라이선스를 통해 자유롭게 사용 및 배포되며, FreeBSD, OpenBSD, NetBSD 등 다양한 운영 체제로 파생되었다. - 1977년 소프트웨어 - OpenVMS
OpenVMS는 DEC에서 개발한 멀티유저, 멀티프로세싱 가상 메모리 기반 운영 체제로, 고도의 안정성, 보안성, 확장성을 특징으로 하며 다양한 아키텍처, 클러스터링, 네트워킹, 프로그래밍 언어 및 개발 도구를 지원한다. - 유닉스 셸 - 유닉스 계열
유닉스 계열은 유닉스 운영체제의 특징과 설계를 공유하는 운영체제들을 지칭하며, 유전적, 상표, 기능적 유닉스로 분류되고 macOS는 상표 유닉스이자 유전적 유닉스에 해당하며 리눅스는 기능적 유닉스의 대표적인 예이다. - 유닉스 셸 - C 셸
C 셸은 C 프로그래밍 언어 스타일을 따른 유닉스 셸로, 대화형 사용에 편리한 기능들을 제공하지만 스크립트 언어로서의 한계와 문법적 결함으로 비판받기도 했으나 다른 셸에 영향을 주었다.
본 셸 - [IT 관련 정보]에 관한 문서 | |
---|---|
개요 | |
![]() | |
종류 | 유닉스 셸 |
개발자 | 스티븐 본 |
발표일 | 1979년 |
운영체제 | 유닉스 |
상세 정보 | |
작성 언어 | 해당 없음 (정보 없음) |
라이선스 | 라이선스 논의 중 |
2. 역사
이 셸은 PWB 셸을 대체할 목적으로 설계되었다. 주요 목적은 다음과 같다:[22]
- 셸 스크립트를 필터로 사용할 수 있도록 하기 위해
- 제어 흐름과 변수를 포함한 프로그래밍 기능 제공
- 모든 입출력 파일 서술자의 제어
- 스크립트 내의 신호 관리 제어
- 셸 스크립트를 해석할 때 문자열 길이의 제한을 없애기 위해
- 매커니즘을 인용하는 문자열의 합리화 및 일반화
- 환경 메커니즘

본 셸은 1976년에 벨 연구소의 스티븐 본이 개발을 시작했으며,[1] 1979년 버전 7 유닉스와 함께 대학에 배포되었다. 실행 파일 이름이 `sh`인 톰슨 셸을 대체하기 위한 것이었으며, 마셰이 셸보다 먼저 등장했다. 대화형 명령 인터프리터이자 스크립트 언어로 사용될 목적으로 제작되었으며, 구조화된 프로그램을 만드는 데 필요한 대부분의 기능을 포함하고 있다. 브라이언 커니핸과 롭 파이크가 저술한 ''유닉스 프로그래밍 환경''을 통해 셸 프로그래밍 언어로 널리 알려졌다.
본 셸은 AT&T에서 수년간 개선되었다. 다양한 변형은 출시된 AT&T 유닉스 버전에 따라 Version7, System III, SVR2, SVR3, SVR4 등으로 불렸다. 셸은 버전 관리가 되지 않아, 기능을 테스트하는 것이 유일한 식별 방법이었다.[6]
1979년 이후 본 셸 버전의 기능은 다음과 같다:[7]
버전 | 연도 | 기능 |
---|---|---|
UNIX System III | 1981 | |
SVR2 | 1984 | |
SVR3 | 1986 | |
SVR4 | 1989 |
데이비드 콘이 원본 본 셸 소스 코드를 기반으로 작성한 Korn shell(ksh)은 본 셸과 C 셸의 중간 형태였다.[8] 구문은 주로 본 셸에서 가져왔으며, 작업 제어 기능은 C 셸과 유사했다. ksh88로 알려진 오리지널 Korn Shell의 기능은 POSIX 셸 표준의 기반으로 사용되었다. pdksh로 알려진 ksh88의 클론은 OpenBSD의 기본 셸이다.
OpenSolaris에서 본 셸의 파생 버전이 오픈 소스로 공개되자, 이를 다른 자유 UNIX 계열 OS용으로 이식하는 [http://heirloom.sourceforge.net/sh.html Heirloom 프로젝트]가 시작되었다. 한편, Solaris 및 SVR4의 본 셸은 오리지널 ALGOL 68풍의 소스 코드가 아니다.
2. 1. 기원
이 셸은 PWB 셸을 대체할 목적으로 설계되었다.[22] 1976년에 벨 연구소의 스티븐 본이 개발을 시작했으며,[1] 실행 파일 이름이 `sh`로 같은 톰슨 셸을 대체하기 위한 것이었다. 본 셸은 마셰이 셸보다 먼저 등장했다. 1979년에 대학에 배포된 버전 7 유닉스 릴리스에서 출시되었다. 대화형 명령 인터프리터로 사용되지만, 스크립트 언어로도 사용될 의도로 제작되었으며, 구조화된 프로그램을 만드는 데 일반적으로 사용되는 대부분의 기능을 포함하고 있다.브라이언 커니핸과 롭 파이크가 저술한 ''유닉스 프로그래밍 환경''이 출판되면서 인기를 얻었다.
본 셸의 주요 목표는 다음과 같다:[2]
- 셸 스크립트를 필터로 사용할 수 있도록 하는 것.
- 제어 흐름 및 변수를 포함한 프로그래밍 기능을 제공하는 것.
- 모든 입/출력 파일 디스크립터에 대한 제어.
- 스크립트 내의 시그널 처리에 대한 제어.
- 셸 스크립트를 해석할 때 문자열 길이 제한 없음.
- 문자열 인용 메커니즘을 합리화하고 일반화하는 것.
- 환경 메커니즘. 이를 통해 시작 시 컨텍스트를 설정하고 셸 스크립트가 명시적인 위치 매개변수를 사용하지 않고도 하위 스크립트(프로세스)에 컨텍스트를 전달할 수 있게 했다.
본 셸은 Mashey shell영어의 대체로 설계되었다.[13]
2. 2. 발전과 변형
이 셸은 PWB 셸을 대체할 목적으로 벨 연구소의 스티븐 본이 1976년부터 개발을 시작했다.[1] 1979년에 버전 7 유닉스 릴리스와 함께 대학에 배포되었다.[1] 톰슨 셸을 대체하기 위한 것이었지만, 마셰이 셸보다 먼저 등장했다.본 셸은 대화형 명령 인터프리터로 사용될 뿐만 아니라, 스크립트 언어로도 사용될 의도로 제작되었으며, 구조화된 프로그램을 만드는 데 일반적으로 사용되는 대부분의 기능을 포함하고 있다. 브라이언 커니핸과 롭 파이크가 저술한 ''유닉스 프로그래밍 환경''은 셸을 튜토리얼 형태로 프로그래밍 언어로 제시한 최초의 상업적으로 출판된 서적이었다.
본 셸의 주요 목표는 다음과 같았다.[2]
- 셸 스크립트를 필터로 사용할 수 있도록 하는 것.
- 제어 흐름 및 변수를 포함한 프로그래밍 기능을 제공하는 것.
- 모든 입/출력 파일 디스크립터에 대한 제어.
- 스크립트 내의 시그널 처리에 대한 제어.
- 셸 스크립트를 해석할 때 문자열 길이 제한 없음.
- 문자열 인용 메커니즘을 합리화하고 일반화하는 것.
- 환경 메커니즘을 통해 시작 시 컨텍스트를 설정하고 셸 스크립트가 명시적인 위치 매개변수를 사용하지 않고도 하위 스크립트(프로세스)에 컨텍스트를 전달할 수 있도록 하는 것.
본 셸은 수년에 걸쳐 AT&T에서 개선되었다. 다양한 변형은 출시된 AT&T 유닉스 버전에 따라 Version7, System III, SVR2, SVR3, SVR4 등으로 명명되었다. 셸은 버전 관리가 되지 않았으므로, 기능을 테스트하는 것이 유일한 식별 방법이었다.[6]
1979년 이후 본 셸 버전의 기능은 다음과 같다:[7]
버전 | 연도 | 기능 |
---|---|---|
UNIX System III | 1981 | |
SVR2 | 1984 | |
SVR3 | 1986 | |
SVR4 | 1989 |
PWB 셸을 대체하기 위해 설계된 이 셸은 다음과 같은 주요 특징을 갖는다.[22]
데이비드 콘이 원본 본 셸 소스 코드를 기반으로 작성한 Korn shell(ksh)은 본 셸과 C 셸 사이의 중간 지점이었다.[8] 구문은 주로 본 셸에서 가져왔으며, 작업 제어 기능은 C 셸과 유사했다. ksh88로 알려진 오리지널 Korn Shell의 기능은 POSIX 셸 표준의 기반으로 사용되었다. pdksh로 알려진 ksh88의 클론은 OpenBSD의 기본 셸이다.
OpenSolaris에서 본 셸의 파생 버전이 오픈 소스로 공개되자, 이를 다른 자유 UNIX 계열 OS용으로 이식하는 [http://heirloom.sourceforge.net/sh.html Heirloom 프로젝트]가 시작되었다. 한편, Solaris 및 SVR4의 본 셸은 오리지널 ALGOL 68풍의 소스 코드가 아니다.
3. 특징
본 셸 자체는 강력한 기능을 가지고 있지 않지만, 유닉스 시스템의 기본 프로그램을 조합하여 사용하면 강력한 스크립트를 만들 수 있다. 예를 들어, 다음 스크립트는 현재 시간에 따라 아침, 점심을 구분하여 출력한다.
#!/bin/sh
hour=`date +%H`
if [ $hour -lt 10 ]; then
echo "아침."
fi
본 셸은 문장의 참/거짓을 판별하는 기능이 없으며, 외부 프로그램을 통해 이를 수행한다. 위 예제에서는 `/bin/[` 프로그램이 `$hour`에 저장된 현재 시간과 10을 비교하는 연산자 `-lt` (lower than)를 사용하여 이 역할을 수행한다.
버전 7 유닉스 본 셸의 특징은 다음과 같다:` `
)을 사용한 명령 대체를 지원한다.
본 셸은 파일 디스크립터 `2>`를 오류 메시지에 사용하는 관례를 처음 도입하여, 오류 메시지를 데이터와 분리하고 스크립트 제어를 용이하게 했다.
스티븐 본은 케임브리지 대학교에서 작업했던 ALGOL 68C 컴파일러[3]의 경험을 바탕으로 코딩 스타일을 구성했다. ALGOL 68의 `if ~ then ~ elif ~ then ~ else ~ fi`, `case ~ in ~ esac`, `for/while ~ do ~ od` ( `od` 대신 `done` 사용) 절을 본 셸 구문에 재사용했다. 또한, v7 셸은 C로 작성되었지만, 본은 매크로[4]를 활용하여 C 소스 코드에 ALGOL 68의 스타일을 부여했다. 이러한 매크로는 국제 난해한 C 코드 콘테스트 (IOCCC)[5]에 영감을 주었다.
1979년 이후 AT&T에서 본 셸은 여러 버전으로 개선되었다. 주요 버전별 특징은 다음과 같다:[7]
버전 | 특징 |
---|---|
System III 셸 (1981) | |
SVR2 셸 (1984) | |
SVR3 셸 (1986) | |
SVR4 셸 (1989) |
4. 다른 셸과의 관계
데이비드 콘이 원본 본 셸 소스 코드를 기반으로 작성한 콘 셸(ksh)은 본 셸과 C 셸 사이의 중간 지점이었다.[8] 구문은 주로 본 셸에서 가져왔으며, 작업 제어 기능은 C 셸과 유사했다. ksh88로 알려진 오리지널 콘 셸의 기능은 POSIX 셸 표준의 기반이 되었다. ksh93이라는 최신 버전은 2000년부터 오픈 소스로 제공되었으며 일부 리눅스 배포판에서 사용된다. ksh88의 클론인 pdksh도 있으며, OpenBSD의 기본 셸이다.
Z 셸은 1990년에 폴 팔스타드에 의해 개발되었으며, 배시, ksh, tcsh의 일부 기능을 포함한 확장된 본 셸이다.
4. 1. C 셸 (csh)
빌 조이는 C 셸의 저자로서, 본 셸이 대화형 사용에 적합하지 않다고 비판했는데,[10] 스티븐 본 본인도 C 셸의 우수성을 인정하는 부분이다. 하지만 본은 자신의 셸이 스크립팅에 더 뛰어나고 모든 유닉스 시스템에서 사용할 수 있다고 주장했으며,[11] 톰 크리스찬센 또한 C 셸이 스크립팅 및 프로그래밍에 적합하지 않다고 비판했다.[12]본 셸에서 파생된 C 셸(csh)은 4.1BSD에서 배포되었으며, BSD 커널의 "잡 제어" 기능을 도입했다. 잡 제어는 대화식으로 프로그램을 중지하거나 나중에 다시 시작하는 기능이다. C 셸이 명령 인터프리터로 인기를 얻은 것은 이 기능 때문이었다. 또한 C 셸은 C 언어 스타일의 문법을 채택하여 본 셸과 호환되지 않게 되었다. 잡 제어 기능은 나중에 본 셸에도 도입되었으며, 이후의 많은 셸에서도 채택되었다.
4. 2. Almquist 셸 (ash)
본 셸은 역사적인 CSRG BSD 릴리스에서 사용되었던 것과 관련하여 저작권 문제가 발생했다. 이에 따라, 케네스 알름퀴스트는 Almquist 셸(알름퀴스트 셸)로 알려지고 BSD 라이선스 하에 배포되는 본 셸의 클론을 개발했다. 이는 오늘날 일부 BSD 계열 운영체제와 메모리 제약적인 환경에서 사용되고 있다. Almquist Shell은 리눅스로 포팅되었으며, 이 포팅은 Debian Almquist shell 또는 dash로 이름이 변경되었다. 이 셸은 Bash에 비해 작은 메모리 사용량으로 표준 `sh` (그리고 최신 계열에서는 POSIX 표준 `sh`) 스크립트의 빠른 실행을 제공한다. 이는 `sh`에서 실행되도록 설계된 스크립트에서 발생하는 bashism – Bash 중심적인 가정들을 드러내는 경향이 있다.4. 3. Bash (Bourne Again Shell)
PWB 셸을 대체할 목적으로 설계되었다.[22]주요 목적들은 다음과 같다.[22]
- 셸 스크립트를 필터로 사용할 수 있게 하기 위해
- 제어 흐름과 변수를 포함한 프로그래밍 가능성을 제공하기 위해
- 모든 입출력 파일 서술자의 제어
- 스크립트 내의 신호 관리 제어
- 셸 스크립트를 해석할 때 문자열 길이의 제한을 없애기 위해
- 매커니즘을 인용하는 문자열의 합리화 및 일반화
- 환경 매커니즘.
본 셸 자체의 기능은 비교적 강력하지 않지만, 유닉스 시스템의 기본 프로그램을 조합하여 사용하면 매우 강력한 기능을 하는 스크립트를 만들 수 있다. 본 셸 자체로는 문장의 참 거짓을 구분해 주는 메커니즘을 갖고 있지 않으며, 대신에 이것은 외부 프로그램이 해 주어야 한다.
배시(Bash)는 GNU 프로젝트를 위해 1989년에 개발되었으며, 본 셸, csh, ksh의 기능을 통합했다. 이는 POSIX를 준수하도록 설계되었다. 배시는 이름에서 알 수 있듯이 본 셸을 기본으로 C 셸과 콘 셸의 기능을 도입했으며, GNU 프로젝트의 일부로 개발되었다. macOS, Cygwin, 많은 리눅스 배포판에서 기본 셸이다.
4. 4. 기타 셸
- 배시는 GNU 프로젝트를 위해 1989년에 개발되었으며, 본 셸, csh, ksh의 기능을 통합했다. 이는 POSIX를 준수하도록 설계되었다.[1]
- rc는 벨 연구소에서 en에 의해 en의 sh를 대체하기 위해 만들어졌다. Plan 9 from Bell Labs의 기본 셸이며, en의 일부로 UNIX로 이식되었다.[1]
- Z 셸은 1990년에 폴 팔스타드에 의해 개발되었으며, 배시, ksh, tcsh의 일부 기능을 포함한 다양한 개선 사항을 갖춘 확장된 본 셸이다.[1]
본 셸에서 파생된 C 셸(csh)은 4.1BSD에서 배포되었으며, BSD 커널의 "잡 제어" 기능을 도입했다. 잡 제어는 대화식으로 프로그램을 중지하거나 나중에 다시 시작하는 기능이다. C 셸이 명령 인터프리터로 인기를 얻은 것은 이 기능 때문이었다. 또한 C 셸은 C 언어 스타일의 문법을 채택하여 본 셸과 호환되지 않게 되었다. 잡 제어 기능은 나중에 본 셸에도 도입되었으며, 이후의 많은 셸에서도 채택되었다.[1]
이후 데이비드 콘이 개발한 콘 셸(ksh)은 본 셸과 C 셸의 중간 형태이며, 문법은 거의 본 셸과 동일하고, 잡 제어 기능을 C 셸에서 가져왔다. 초기 콘 셸(ksh88)의 기능은 POSIX 셸 표준의 기반이 되었다. 그 후 ksh93이 2000년에 오픈 소스화되었으며, 여러 리눅스 배포판에서 사용되고 있다. ksh88의 클론인 pdksh도 있으며, OpenBSD의 기본 셸이다.[1]
배시(''Bourne Again Shell'')는 이름에서 알 수 있듯이 본 셸을 기본으로 C 셸과 콘 셸의 기능을 도입했으며, GNU 프로젝트의 일부로 개발되었다. macOS, Cygwin, 많은 리눅스 배포판에서 기본 셸이다.[1]
rc는 벨 연구소의 Tom Duff|톰 더프영어가 Version 10 Unix|Version 10 Unix영어에서의 sh의 후계로 개발했다. Plan 9 from Bell Labs에서는 기본 셸로 사용되고 있다. Plan 9 from User Space|Plan 9 from User Space영어의 일부로 UNIX에도 이식된 적이 있다.[1]
과거 CSRG의 BSD 릴리스에서도 사용되었던 본 셸은 저작권 문제에 얽혀 있었다. 그래서 케네스 알름퀴스트가 알름퀴스트 셸이라고도 불리는 본 셸의 클론을 개발했다. 이는 BSD 라이선스로 제공되었으며, 현재도 BSD 계열에서 메모리 용량이 적은 경우 등에 사용되고 있다. 리눅스에도 이식되어 데비안 알름퀴스트 셸 또는 dash라고 불린다. 메모리 사용량이 적기 때문에 셸 스크립트 실행이 배시보다 빠르다는 특징이 있다.[1]
5. 비판
본 셸은 C 셸에 비해 다음과 같은 단점이 있다고 비판받아 왔다.[18][19]
참조
[1]
웹사이트
Stephen Bourne Keynote for BSDCan 2015
https://www.bsdcan.o[...]
[2]
웹사이트
The A-Z of Programming Languages: Bourne shell, or sh
http://www.computerw[...]
2009-03-06
[3]
기술 보고서
A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986
http://www.cs.dartmo[...]
[4]
웹사이트
mac.h – Macros used by Bourne to structure C like Algol68C
http://minnie.tuhs.o[...]
AT&T Corporation
1979-01-12
[5]
웹사이트
The IOCCC FAQ – Q/A: How did the IOCCC get started?
http://www.ioccc.org[...]
ioccc.org
[6]
웹사이트
what shell is this
http://www.in-ulm.de[...]
[7]
웹사이트
traditional Bourne shell family / history and development
http://www.in-ulm.de[...]
[8]
논문
ksh - An Extensible High Level Language
https://www.usenix.o[...]
USENIX Association
1994-10-26
[9]
웹사이트
Schily Bourne Shell - A modern enhanced and POSIX compliant Bourne Shell source maintained by Jörg Schilling.
http://schilytools.s[...]
[10]
서적
An Introduction to the C shell
http://www.kitebird.[...]
[11]
뉴스
The Unix Shell
https://archive.org/[...]
1983-10-01
[12]
웹사이트
Csh Programming Considered Harmful
http://www.faqs.org/[...]
1995-09-28
[13]
뉴스
The A-Z of Programming Languages: Bourne shell, or sh
http://www.computerw[...]
Computerworld
2009-03-01
[14]
웹사이트
mac.h - Macros used by Bourne to structure C like Algol68C
http://minnie.tuhs.o[...]
AT&T
1979-01-12
[15]
웹사이트
The IOCCC FAQ - Q/A: How did the IOCCC get started?
http://www.ioccc.org[...]
www.ioccc.org
2004-01-01
[16]
웹사이트
Bourne Shell release testing script from Sven Mascheck
http://www.in-ulm.de[...]
[17]
웹사이트
History of the Bourne Shell family
http://www.in-ulm.de[...]
[18]
서적
An Introduction to the C shell
http://www.kitebird.[...]
[19]
웹사이트
Introduction to the Unix shell history
http://www.softpanor[...]
2009-08-15
[20]
서적
UNIX C SHELL フィールドガイド
パーソナルメディア株式会社
1987-10-15
[21]
웹사이트
Rc — The Plan 9 Shell
http://doc.cat-v.org[...]
[22]
뉴스
The A-Z of Programming Languages: Bourne shell, or sh
http://www.computerw[...]
컴퓨터월드
2009-03-01
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com