Có hai môi trường lập trình có sẵn trên mọi hệ điều hành giống như unix, đó là Turing-Complete và có thể gọi các chương trình khác: awk và sh , họ shell Bourne / POSIX. AWK được định hướng theo hướng xử lý văn bản (nó bổ sung cho các tiện ích chuyên dụng hơn), trong khi sh được định hướng là ngôn ngữ kết dính để đặt các chương trình lại với nhau. Sh là sự phổ biến ngôn ngữ kịch bản trên Linux và trên khắp thế giới unix.
Các POSIX tiêu chuẩn xác định các tính năng bắt buộc của chính nó sh và tiện ích đi kèm. Hầu hết các hệ thống giống như unix tuân thủ POSIX 1003.1-2004 (còn gọi là Unix v3 đơn, hay còn gọi là vấn đề Đặc tả cơ sở nhóm mở 6); phiên bản mới nhất của tiêu chuẩn đó là POSIX 1003.1-2008 (hay còn gọi là Unix v4 đơn, hay còn gọi là Vấn đề đặc tả cơ sở nhóm mở 7).
Mọi hệ thống giống Linux và unix hoặc Unix đều có lớp vỏ kiểu Bourne /bin/sh
, và bất kỳ hệ thống không cổ nào cũng có lớp vỏ tuân thủ POSIX (không có lỗi thỉnh thoảng). Mọi hệ thống giống như unix hiện đại (bao gồm cả Linux) đều hỗ trợ shebang , vì vậy nó sẽ tự động chạy các tập lệnh /bin/sh
nếu dòng đầu tiên là #!/bin/sh
. Có các hệ thống POSIX sh
được đặt ở một nơi khác (thường là các lớp mô phỏng trên các HĐH mà bạn không nghĩ là giống như Unix).
Các hệ thống Linux nhúng có thể có hệ thống BusyBox bị loại bỏ không triển khai tất cả các tính năng POSIX. BusyBox có một số lượng lớn các tùy chọn thời gian biên dịch để phù hợp với các hệ thống dấu chân nhỏ, vì vậy thật khó để biết trước những gì sẽ xảy ra, bạn phải điều chỉnh các tập lệnh của mình cho một thiết bị cụ thể. BusyBox là triển khai dấu chân nhỏ phổ biến nhất của các tiện ích sh và các loại; một điều nữa bạn có thể gặp là môi trường shell cực kỳ giảm trong Android (các phiên bản sau ít bị thiếu máu hơn).
Các hệ thống Linux không nhúng hầu như luôn có dấu gạch ngang hoặc bash như /bin/sh
. Dash là một vỏ nhỏ và nhanh, thực hiện ít hơn các tính năng POSIX. Bash là một vỏ lớn hơn với nhiều tính năng hơn.
Các hệ thống Linux không nhúng hầu như luôn có Bash được cài đặt như /bin/bash
. Do đó, đối với tính di động trên các hệ thống Linux không được nhúng, bạn có thể giả sử rằng bash có sẵn. Trong số các tính năng bổ sung hữu ích của bash là mảng, khả năng đối phó với các tệp chấm một cách thuận tiện, pipestatus
biến để có được trạng thái trả về của tất cả các lệnh trong một đường ống, các toán tử so sánh bổ sung cho thời gian tệp và (trong các phiên bản gần đây) khớp biểu thức chính quy .
Một trong những đặc điểm của lập trình shell là bạn không chỉ sử dụng sh
chương trình, bạn cũng đang sử dụng một số tiện ích . Hầu hết các tiện ích xử lý tệp và xử lý văn bản trên Linux là các lõi GNU (trên các hệ thống nhúng, chúng thường từ BusyBox).
Nếu bạn cần tính di động ngoài Linux, cách tốt nhất của bạn là bám vào POSIX. Các biến thể unix khác có thể chưa được cài đặt bash (bash là một phần của cài đặt tiêu chuẩn trên OSX, nhưng là gói tùy chọn trên * BSD và hầu hết các thông báo thương mại). Hầu như tất cả các biến thể unix khác với Linux và OSX (tức là * BSD và các đơn vị thương mại) đều có một số phiên bản của vỏ Korn , ít nhất là pdksh . Nhiều tiện ích mở rộng tiện lợi của bash là từ ksh, vì vậy có thể hữu ích khi viết các tập lệnh có thể chạy dưới cả hai, nhưng việc phát hiện vị trí của bash hoặc ksh trên một hệ thống không xác định có thể hơi khó khăn.
Vỏ không thể làm mọi thứ. Nếu bạn cần một ngôn ngữ phức tạp hơn, hai lựa chọn phổ biến hơn là Perl và Python (bất kỳ thứ gì khác đều bị bỏ xa như một ngôn ngữ kịch bản unix). Perl là ngôn ngữ kịch bản truyền thống và rất ít hệ thống Linux không nhúng, nhưng Python đang có được chỗ đứng (được tăng cường một phần bằng cách là ngôn ngữ kịch bản được đề xuất cho Ubuntu). Trong thế giới không phải là Linux, Perl là một phần của bản cài đặt cơ bản trên OSX và OpenBSD; nó là tùy chọn nhưng rất phổ biến được cài đặt trên FreeBSD và tùy chọn nhưng thường được cài đặt trên NetBSD.
sh
.