bash 스크립팅은 쉘 스크립팅과 동일합니까?


58

우분투를 처음 접했습니다. 사람들이 "쉘 스크립팅", "bash 스크립팅"이라고 말합니다.

나는 그들이 같은 궁금해? 아니면 다른가요?


답변:


55

Bash ( bash)는 가장 많이 사용되는 유닉스 쉘 중 하나입니다. Bash는 " B ourne A gain SH ell"의 약자이며 원래 Bourne 쉘 ( sh) 의 교체 / 개선입니다 .

셸 스크립팅은 모든 셸에서 스크립팅하는 반면 Bash 스크립팅은 Bash 전용 스크립팅입니다. 그러나 실제로 "shell script"와 "bash script"는 문제의 쉘이 Bash가 아닌 한 상호 교환 적으로 사용되는 경우가 많습니다.

편집 : 실제로 우분투의 기본 스크립팅 쉘은 대시이며 기본 대화 형 쉘 (터미널을 끌어 올 때 얻는 것)은 Bash입니다. 그럼에도 불구하고, 두 용어는 여전히 대부분 상호 교환 가능합니다.


1
대시를 기본 스크립팅 쉘로 정의하는 것은 무엇입니까?
wjandrea

1
@wjandrea 기본 시스템/bin/sh을 만들기 위해 symlink 라는 사실 이지만 기본 스크립팅 쉘 이 아닙니다 . 즉, 반드시 사용해야하는 서면 규칙이 없습니다 . 이 스크립트를 사용 하는 경우 주로 이식성 때문에 스크립트가 POSIX 호환 Bourne 제품군 쉘 을 갖는 여러 Unix와 유사한 OS 플랫폼에서 사용될 것으로 예상됩니다 . /bin/dash/bin/sh/bin/sh/bin/sh
Sergiy Kolodyazhnyy

29

소개

셸 스크립팅과 Bash스크립팅은 sh스크립트를 실행하는 데 사용할 수있는 다른 셸이 존재하기 때문에 같은 것이 아닙니다 . 실행하려는 스크립트는 스크립트 Bash로 레이블이 지정되어야합니다 Bash. 에 Bash비해 확장 된 기능을 가진 sh여러 배포판에서 사용자 스크립트를 실행하는 데 가장 일반적으로 사용되는 용어이기 때문에이 용어는 종종 같은 의미로 사용됩니다 . 그러나 같은 다른 포탄이있다 Korn (ksh), C shell (csh)그리고는 Z shell (zsh), 그러나 우리의 토론으로 여기에 가지 않을거야 shbash우분투에 가장 관련이있다. 여기서 훌륭한 IBM 기사 는 Linux에서 쉘의 진화에 대해 자세히 설명하고 쉘 아키텍처와 쉘의 차이점을 잘 설명합니다.

쉘 스크립팅

ShStephen Bourne이 개발 한 최초의 유닉스 쉘입니다. 그러나 데비안 기반 시스템과 우분투 dashsh쉘로 간주합니다 ( sh실제로 심볼릭 링크되어 있음 dash). 데비안과 우분투에서는 속도가 빠르기 때문에 sh중요한 시스템 절차와 시작시 키 스크립트를 실행하는 데 더 자주 사용됩니다. 자세한 내용은 우분투 위키를 참조하십시오 . BashBourne Again SHell의 약자로 브라이언 폭스 (Brian Fox)가 나중에 개발했으며 원본을 많이 확장했습니다 sh. 폭스와 다른 사람들의 개발은 BashGNU 프로젝트의 중요한 부분이었습니다. 자세한 내용 은 역사에 대한 위대한 토론 Bash을 참조하십시오.

둘 것이 중요합니다 shBash우분투와 다른 배포판에서 사용되는,이다 POSIX그들은 명령은 쉘에서 실행하는 방법에 대한 표준의 숫자에 가입 즉, 준수. 이는 OS에서 사용되는 스크립트의 결과를 안정적으로 예측할 수 있고 POSIX개발자에게 특히 중요한 셸의 동작을 해당 매개 변수 내에 유지할 수 있도록 하기위한 것입니다. 표준에 대한 자세한 내용 은 공식 문서를 참조하십시오 .

쉘 스크립트는 스크립트 .sh로 실행되도록 의도되었지만 bash스크립트 #!/bin/bash상단에 있지만 쉘 접미어가 종종 있습니다 . 스크립트가 script.sh 또는 my.script 인지 여부는 실제로 중요하지 않습니다. 중요한 것은 인터프리터에 대한 호출인지 /bin/sh또는 /bin/bash입니다. 명령 줄에서 sh또는 을 사용하여 셸 스크립트를 호출 할 수도 있습니다 bash.

그러나,이다 중요한 결과가 모든으로, 호출되는 인터프리터에 따라 다를 수 있음을 유의 bash명령에서 작동 sh가장 반면, sh명령에 작동합니다 bash. 일반적으로 대부분의 사용자는 /bin/bash스크립트 에 사용 하여 확장 기능 세트를 활용할 수 있습니다. /bin/sh필요한 경우 시스템 스크립트를 실행할 수 있습니다 .

Bash Shell 스크립팅을위한 리소스

모범 사례를 따르고 유용한 스크립트를 작성할 수있는 조언을 제공하는 유용한 리소스를 온라인에서 찾기가 어려운 경우가 있습니다. 그 후 man bash가장 중요한 리소스 중 일부는 Greg 's wiki , Bash 해커 및 Steve Parker의 셸 스크립팅에 관한 최근의 책입니다 Bash. Bash 초보자 가이드 도 잘 소개 합니다.


2
이 답변은 실제로 내보다 우수합니다 (허용 된 답변).이 질문은 일주일 전에 나왔습니다.
힐튼 Shumway

4

우분투처럼 사용할 여러 포탄이있다 bash, zsh, ksh, tcshcsh.

누군가가 shell 이라고 말할 때마다 , 그는 그들 중 하나에 대해 이야기하고 있습니다. 그러나 이러한 셸은 서로 약간 다릅니다. 따라서 bash누군가가 스크립팅에 대해 이야기 할 때 쉘을 사용하고 있지만 누군가가 쉘 스크립팅에 대해 이야기 할 때는 자신을 사용하지 않습니다 bash. 그러나 bash우분투 스크립팅에서 일반적으로 사용되는 것처럼 그는 일반적으로 사용합니다. 또한, 다양한 쉘은 많은 측면에서 동일하므로 일반적으로 중요하지 않습니다.


2
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768 Mar 29 11:53 /bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr  3 08:58 /bin/bash*

이것은 'sh'가 'dash'에 대한 심볼릭 링크이며 Ubuntu의 기본 대화식 쉘인 / bin / bash는 / bin / sh보다 거의 9 배 큰 실행 파일이라는 것을 보여줍니다.

실제로 'man sh'(1590 줄)와 'man bash'(5459 줄)는 bash가 전통적인 'sh'의 큰 수퍼 세트임을 나타냅니다.

여기에서 더 읽으십시오 :


2

쉘 스크립트 는 POSIX 호환 OS 의 시스템 쉘 에서 실행할 수 있는 이식성 중심 스크립트 로 정의됩니다 . 구문은 POSIX 표준으로 정의 된 쉘 스크립팅 언어 구문과 동일하거나 유사합니다. 이것이 Linux / Unix / * BSD 등과 같은 대부분의 POSIX 호환 OS에 대한 표준입니다. POSIX는 운영 체제에서 호환성에 대한 가장 일반적인 근거입니다.

앞에서 언급 한 OS와 다른 OS는 #! /bin/shPOSIX 명령과 구문을 구현하는 것 외에도 자체 확장 기능을 갖거나 덜 유용한 기능을 제거 할 수있는 비 대화식 사용법 (예 : shebang 을 사용하는 시스템 스크립트 또는 스크립트 실행)에 대해 다른 쉘을 구현합니다. 성능상의 이유로 POSIX 그라운드는 다른 POSIX 호환 Os에 맞게 설계된 스크립트의 높은 수준의 이식성을 허용합니다.

대부분의 언급 된 OS에는 별도의 대화식 쉘이 있으며 일반적으로 모든 기능을 갖춘 bash 입니다. Bash는 POSIX를 준수하지만 많은 추가 명령 풀이 있으며 다른 구문을 지원합니다. Bash가 실행되는 동안 --posix 명령 행 옵션으로 Bash를 시작하거나 Bset이 실행되는 동안 'set -o posix'를 실행하면 Bash가 Bash 기본값으로 지정된 영역에서 POSIX에 지정된 동작을 변경하여 Bash가 POSIX 표준에 더 가깝게 적용됩니다. 참조 다릅니다 : https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html

유닉스 계열 OS에서 쉘 실행 파일에 대한 Shebang 지정자와 균일 한 경로

쉘의 실행 파일을 배치하는 통일 된 규칙 (보통 '/ bin /'디렉토리에 있음) 덕분에 쉘 스크립트를 작성하기위한 통일 ​​된 규칙을 가질 수 있습니다.보다 구체적으로, shebang 표현식에서 어느 경로를 가리킬 것인지 명확하게 알 수 있습니다 스크립트를 실행하기위한 적절한 쉘 실행 파일 유닉스 / 리눅스 / * BSD 파일 시스템은 본질적으로 확장자를 지원하지 않으므로 파일 확장자는 추가 힌트 또는 색인 목적으로 만 사용됩니다.

데비안 / 우분투에서는 구체적으로, 대시 쉘의 실행 파일을 bin/sh가리키는 심볼릭 링크 bin/dash 있습니다. 이는 시스템 쉘을 대시로 만듭니다. 이는 4 배 더 빠르며 더 많은 기능을 가진 배쉬보다 ~ 1 / 10 크기입니다. 출처 : https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash

데비안 / 우분투 대화식 터미널은 기본적으로 경로가 균일 한 다른 많은 유닉스 계열 운영 체제와 마찬가지로 bash /bin/bash입니다.

POSIX.1-2017 표준 : http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html

일반적인 규칙은 다음과 같습니다.

POSIX에서 명령 또는 옵션을 정의하지 않은 #! /bin/sh경우 처음 에는 스크립트에 넣지 마십시오 .

스크립트를 변환하거나 오류를 확인하십시오

스크립트를 bash에서 POSIX 형식으로 변환하기 위해 쉘 스크립트에서 버그를 자동으로 확인하거나 bash 스크립트에서 POSIX와 호환되도록하기 위해 어떤 변경을해야하는지 확인할 수 있습니다.

https://www.shellcheck.net/

http://mywiki.wooledge.org/Bashism


1
좋은 대답, +1 AskUbuntu에 오신 것을 환영합니다!
Sergiy Kolodyazhnyy

1
관련하여 / 빈 / SH으로 대시를 우분투에, 당신은 또한 인용 할 수 있습니다 것을에 대한 기사가있다. 그리고 askubuntu.com/q/976485/295286
Sergiy Kolodyazhnyy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.