[include(틀:컴퓨터공학)] [include(틀:프로그래밍 언어)] [목차] == 개요 == '''Shell''' [[운영체제]]에서 [[커널(운영 체제)|커널]]과 이용자 사이에 끼어서 이용자의 명령을 해석하고 그 처리 결과를 뿌려주는 시스템 프로그램. Shell의 사전적 의미인 조개/소라 껍데기에서 따온 말로 내부의 커널이 있고 사용자는 이를 감싸고 있는 껍데기를 통해 커널에 접근한다는 개념으로 컴퓨터 초창기인 60년대부터 사용된 단어이다. 셸은 흔히 두 종류로 구분하는데, 명령 줄 셸과 그래픽 셸이다. 전자는 [[CLI]]이고 후자는 [[GUI]]라 부른다. CLI는 때때로 CUI(character 또는 console user interface)라고 부르기도 한다. 그 외에도 이 환경으로 접속하는 보안접속 프로그램([[SSH]]; '''S'''ecure '''SH'''ell)을 일컫는 말이기도 하다. == 특징 == 사용자가 운영 체제와 상호 작용할 수 있도록 하는 명령줄 인터페이스이다. 쉘은 사용자의 입력을 읽고 명령을 해석하고 실행한다. 또한 사용자가 환경을 사용자 지정하고 스크립트를 사용하여 작업을 자동화하는 방법을 제공한다. [[https://jkcb.tistory.com/59||다양한 유형의 셸]]이 있고 각각 고유한 명령과 기능이 있다. == [[유닉스]] 계열 운영체제의 셸 == [[파일:zsh-on-iphone.jpg]] zsh에 oh-my-zsh를 적용하고 agnoster 테마를 사용한 모습. 최초의 셸은 벨 연구소에서 스티븐 본이 개발한 본 셸(Bourne shell, sh)이며, 이를 개선한 본 어게인 셸(Bash), C셸(csh), 콘셸(ksh), Z셸(zsh) 등이 만들어졌다. (참고:리눅스의 모태가 되는 유닉스 최초의 셸은 켄 톰슨(Ken Thompson)이 멀틱스(Multics)셸을 따라 모형화한 sh이다.) 최초의 셸이 언제 어디서 누구에 의해 만들어진 무엇인가에 대해서는 알 수 없으나, 본격적으로 최초의 셸다운 유닉스 셸로 알려진 것은 1979년말 V7 유닉스(AT&T의 7번째 유닉스)에 탑재된 셸이다. 제작자인 Stephan Bourne의 이름을 따 본셸이라 부르며, Algol로 짜여젔다. 이 셸은 단순하고 속도가 빨랐으나, 어디까지나 '''[[어셈블리어#s-5|귀중하신 컴퓨터님의 작업을 인간이 느리게 하지 않기 위한]]''' 목적만을 가지고 있어서, 대단히 불친절했다. 주로 시스템 관리 작업의 자동화 이외의 일을 하기는 대단한 인내심과 '''컴퓨터님에 대한 복종심''' 없이는 거의 불가능하였다. 그래서 사용자 친화적으로 나온 것이 바로 '''Bash'''이다. 자유 소프트웨어 재단의 Brian Fox가 개발하였으며, [[자유 소프트웨어 재단]]의 물건답게 주요 [[Linux|리눅스]] 시스템의 기본 셸로 쓰이고 있다. 리눅스를 메인으로 사용하거나 셸에 더 많은 기능이 필요한 사람들은 '''zsh'''[* 보통 [[https://github.com/robbyrussell/oh-my-zsh|oh-my-zsh]]와 함께 사용한다.]를 많이 사용하는 편이다. [[Windows 7]] Service Pack 1 이후 환경에서는 [[Git]]을 설치하면 같이 설치되는 Git Bash를 통하여 Bash Shell을 사용할 수 있으며, [[Windows 10|윈도우 10]]에서는 Fall Creaters Update 이후 버전부터 [[유닉스/MS 윈도우|WSL]]을 통해 Bash Shell을 사용할 수 있다. 기존의 Bash 명령어는 물론 윈도우 영역과의 통신도 가능하다. 1970년대 말에는 다른 셸들도 등장하였는데, 캘리포니아의 버클리 대학교의 Bill Joy가 C언어로 C셸을 개발하였다. 그러나 기본적으로 C셸은 대형 컴퓨터용이었으며, Bourne Shell보다도 느렸기 때문에 속도 측면에서 그다지 좋지 못한 평가를 받았다. AT&T의 David Korn은 1988년 유닉스 SVR4 배포판에 콘셸을 탑재하여 처음으로 배포한다. Paul Falsted는 Z셸을 만들었다. [[macOS]]의 [[GUI]] 셸은 [[Finder]]이며, [[macOS/버전/10#s-4|Catalina]] 버전부터 기본 셸이 bash에서 zsh로 변경되었다. 그러나 zsh로 변경되었어도 bash 역시 남아있다. 그리고 macOS에는 공식적으로 bash 5.1.8 버전이 최신인 현재까지도 2007년에 릴리즈된 bash 3.2 버전이 탑재되고 있다. === 셸 스크립트 === [[유닉스]] 계열 운영체제의 많은 셸들이 셸 스크립트를 사용하므로, 이를 사용하여 운영체제의 명령뿐만 아니라 응용 프로그램들을 실행하여 많은 작업을 자동화 할 수 있다. [[GUI]]가 각 프로그램들을 조합하여 자동화 하기 매우 힘든 데 비해 [[CLI]]의 장점이 빛나는 부분. 유닉스 계열의 운영체제는 본래 확장자를 엄격하게 구분하지 않기에 확장자가 없거나 다르게 되어 있는 셸 스크립트 파일도 많지만, 보통 셸 스크립트의 파일은 .sh라는 확장자를 갖는다. === 주요 셸 목록 === * [[SH#s-3|sh]] * ksh * mksh * pdksh * [[csh]] * tcsh * [[Bash|bash]] * [[zsh]] * fish * rc * dash == [[Microsoft Windows|윈도우]]의 셸 == 윈도우에는 [[Windows 탐색기]](EXPLORER.EXE)라는 [[GUI]] 환경의 셸이 있다. 작업표시줄[* Windows 11에서 분리될 예정이다.]과 시작 메뉴, 바탕화면 및 아이콘, 파일 탐색기를 제공한다. [[CLI]] 환경으로 [[명령 프롬프트]], [[PowerShell|파워셸]][* 명령 프롬프트의 차세대 버전]이 있다. 또한 [[Windows 10/버전/Redstone 2#s-3.7.5|리눅스 서브시스템]]의 모든 프로그램은 bash를 거쳐서 돌아가기 때문에 엄밀하게 따지면 bash만이 리눅스 서브시스템의 유일한 셸이라고 할 수 있다. 다만 이들은 일단 운영체제가 기동되고 [[GUI]]환경의 셸([[Windows 탐색기]])가 실행된 이후 일종의 [[응용 프로그램]]처럼 실행된다. 윈도우 3.0과 3.1은 프로그램 관리자[* 윈도우 3.1에서는 '프로그램관리자'라고 붙여 쓴다.]라는 셸을 사용한다. 윈도우 2.1까지는 MS-DOS 실행파일을 사용한다. [[윈도우 터미널]]은 셸이 아닌 [[터미널#s-2]] 에뮬레이터이다. === 일괄 프로그램 ([[배치 파일]]) === Batch File 윈도 [[명령 프롬프트]]를 위한 [[스크립트 언어]]. [[GUI]]이므로 자동화가 곤란한 [[Windows 탐색기]]를 대신하여 [[CUI]] 환경인 [[명령 프롬프트]]에서 자동화 작업을 수행할 수 있도록 해 준다.[* 물론 CUI 응용프로그램 한정.] [[확장자]]는 [[MS-DOS]] 시절부터 내려오는 '''.bat'''과 [[명령 프롬프트]] 고유의 '''.cmd'''가 있다. 아직도 .bat 확장자가 널리 쓰인다.[* '''.ps1'''이라는 확장자도 있다. 이는 powershell에서 실행된다.] === cmd 대체 프로그램 === [[https://jpsoft.com/products/tcc-cmd-prompt.html|TCC]](Take Command Consol)은 cmd에 상위 호환되는 shell 이다. 더 많은 명령, 내장 함수 등을 이용하여 풍족한 cmd 생활과 batch 생활을 즐기게 도와준다. 유료 프로그램이지만, 무료로 사용할 수 있는 [[https://jpsoft.com/products/tcc-le.html|TCC/LE]] 와 batch화일만 실행시켜주는 [[https://jpsoft.com/products/tcc-rt-runtime.html|TCC-RT]]를 이용할 수도 있다.[* 4DOS, NDOS라는 명령을 안다면 당장 써 봐라, 두번 써봐라] == 기타 [[운영체제]] == * [[MS-DOS]] - [[COMMAND.COM]]이 셸 역할을 수행한다. [[윈도우 NT]] 계열의 [[명령 프롬프트]](cmd.exe)는 COMMAND.COM으로부터 명령어 형식을 비롯하여 많은 것을 물려받았다. 단, COMMAND.COM과 cmd.exe 사이의 직접적인 관련은 없고, 단지 정신적인 후속작이라고 할 수 있다. 참고로 현재 cmd.exe는 후속 소프트웨어인 [[PowerShell]]로 대체되고 있다. MS-DOS 6.0까지는 MS-DOS 셸이라는 그래픽 셸도 있다. [[분류:UI]][[분류:스크립트 언어]]