모든 유닉스 계열 운영 체제에서 사용할 수있는 두 가지 프로그래밍 환경이 있으며 Turing-complete이고 Bourne / POSIX 쉘 제품군 인 awk 및 sh 를 호출 할 수 있습니다. AWK는 텍스트 처리 (보다 전문화 된 유틸리티를 보완 함)를 지향하는 반면 sh는 프로그램을 구성하기위한 풀 언어를 지향합니다. Sh는 Linux 및 유닉스 세계 에서 보편적 인 스크립팅 언어입니다.
POSIX의 표준은 쉬 자체 및 관련 유틸리티의 필수 기능을 정의합니다. 대부분의 유닉스 계열 시스템은 POSIX 1003.1-2004 (일명 Open Unix v3, 일명 Open Group Base Specification 이슈 6)를 준수합니다 . 이 표준의 최신 버전은 POSIX 1003.1-2008 (일명 Open Unix v4, 일명 Open Group Base Specification Issue 7)입니다.
모든 Linux 및 유닉스 또는 유닉스 계열 시스템에는 경로에 Bourne 스타일 쉘이 있으며 /bin/sh
, 비 앤티크 시스템에는 POSIX 호환 쉘이 있습니다 (때때로 버그가 발생하지 않음). 모든 최신 유닉스 계열 시스템 (Linux 포함)은 shebang을 지원 하므로 /bin/sh
첫 번째 행이 인 경우 자동으로 스크립트를 실행 #!/bin/sh
합니다. sh
다른 위치에 있는 POSIX 시스템 이 있습니다 (일반적으로 Unix와 같은 것으로 생각하지 않는 OS의 에뮬레이션 계층).
임베디드 Linux 시스템에는 모든 POSIX 기능을 구현하지 않는 제거 된 BusyBox 시스템이있을 수 있습니다. BusyBox에는 적은 공간을 차지하는 시스템을 수용 할 수있는 많은 컴파일 타임 옵션이 있으므로 미리 예상 할 사항을 알기가 어렵 기 때문에 스크립트를 특정 장치에 맞게 조정해야합니다. BusyBox는 sh 및 여러 유틸리티의 가장 일반적인 작은 풋 프린트 구현입니다. 또 다른 문제는 안드로이드에서 쉘 환경이 획기적으로 줄어드는 것입니다 (나중 버전은 빈약함).
비 임베디드 Linux 시스템은 거의 항상 대시 또는 bash를가 집니다 /bin/sh
. 대시는 POSIX 기능을 거의 구현하지 않는 작고 빠른 셸입니다. Bash는 더 많은 기능을 갖춘 더 큰 쉘입니다.
비 임베드 Linux 시스템은 거의 항상 Bash를로 설치합니다 /bin/bash
. 따라서 임베디드 Linux 시스템에서 이식성을 위해 bash를 사용할 수 있다고 가정 할 수 있습니다. bash의 유용한 추가 기능 중에는 배열, 도트 파일을 편리하게 처리하는 기능 pipestatus
, 파이프 라인의 모든 명령의 반환 상태를 얻는 변수, 파일 시간에 대한 추가 비교 연산자 및 (최근 버전에서는) 정규식 일치가 있습니다. .
쉘 프로그래밍의 특징 중 하나는 sh
프로그램을 사용하는 것이 아니라 많은 유틸리티를 사용한다는 것입니다 . Linux에서 대부분의 파일 조작 및 텍스트 처리 유틸리티는 GNU coreutils입니다 (내장 시스템에서는 보통 BusyBox에서 제공).
Linux 이외의 이식성이 필요한 경우 POSIX를 사용하는 것이 가장 좋습니다. 다른 유닉스 변형에는 bash가 설치되어 있지 않을 수 있습니다 (bash는 OSX에서 표준 설치의 일부이지만 * BSD 및 대부분의 상업용 유니스에서는 옵션 패키지입니다). Linux 및 OSX 이외의 거의 모든 유닉스 변형 (예 : * BSD 및 상업용 유니스)에는 최소한 pdksh 와 같은 Korn 쉘 버전이 있습니다. bash의 편리한 확장 중 많은 부분이 ksh에서 제공되므로 둘 다에서 실행할 수있는 스크립트를 작성하는 것이 유용 할 수 있지만 알 수없는 시스템에서 bash 또는 ksh가있는 위치를 감지하는 것은 약간의 고통이 될 수 있습니다.
껍질은 모든 것을 할 수는 없습니다. 좀 더 정교한 언어가 필요한 경우, 가장 일반적인 두 가지 선택은 Perl과 Python입니다. Perl은 전통적인 스크립팅 언어이며 임베디드 리눅스 시스템이 부족한 시스템은 거의 없지만 파이썬은 우분투를 위해 권장되는 스크립팅 언어로 부분적으로 향상되었습니다. 비 Linux 환경에서 Perl은 OSX 및 OpenBSD의 기본 설치의 일부입니다. 선택 사항이지만 FreeBSD에 매우 일반적으로 설치되며 선택 사항이지만 종종 NetBSD에 설치됩니다.
sh
.