Ada dua lingkungan pemrograman yang tersedia pada setiap sistem operasi mirip-unix, yang Turing-complete dan yang dapat memanggil program lain: awk , dan sh , keluarga shell Bourne / POSIX. AWK berorientasi pada pemrosesan teks (ini melengkapi utilitas yang lebih khusus), sementara ia berorientasi pada menjadi bahasa lem untuk menyatukan program. Sh adalah yang bahasa scripting yang universal di Linux dan di seluruh dunia unix.
Standar POSIX mendefinisikan fitur wajib sh itu sendiri dan utilitas terkait. Sebagian besar sistem mirip-unix mematuhi POSIX 1003.1-2004 (alias Single Unix v3, alias edisi Open Group Base Specification 6); versi terbaru dari standar itu adalah POSIX 1003.1-2008 (alias Single Unix v4, alias Open Group Base Specification Issue 7).
Setiap Linux dan sistem unix atau Unix-like memiliki shell Bourne-style di jalan /bin/sh
, dan setiap sistem non-antik memiliki shell yang sesuai dengan POSIX (kecuali bug sesekali). Setiap sistem seperti unix modern (termasuk Linux) mendukung shebang , sehingga secara otomatis menjalankan skrip /bin/sh
jika baris pertama adalah #!/bin/sh
. Ada sistem POSIX di mana sh
terletak di tempat lain (biasanya lapisan emulasi pada OS Anda tidak akan dianggap sebagai benar-benar seperti Unix).
Sistem Linux Tertanam mungkin memiliki sistem BusyBox yang tidak dapat mengimplementasikan semua fitur POSIX. BusyBox memiliki sejumlah besar opsi waktu kompilasi untuk mengakomodasi sistem footprint kecil, sehingga sulit untuk mengetahui apa yang diharapkan sebelumnya, Anda harus menyesuaikan skrip Anda dengan perangkat tertentu. BusyBox adalah implementasi kecil-tapak yang paling umum dari utilitas sh dan bermacam-macam; satu lagi yang mungkin Anda temui adalah lingkungan shell yang sangat berkurang di Android (versi yang lebih baru kurang anemia).
Non-embedded system Linux hampir selalu memiliki baik dasbor atau pesta sebagai /bin/sh
. Dash adalah shell kecil dan cepat yang mengimplementasikan sedikit lebih banyak dari fitur POSIX. Bash adalah shell yang lebih besar dengan lebih banyak fitur.
Sistem Linux yang tidak tertanam hampir selalu memiliki Bash yang diinstal sebagai /bin/bash
. Oleh karena itu, untuk portabilitas pada sistem Linux yang tidak tertanam, Anda dapat mengasumsikan bahwa bash tersedia. Di antara fitur tambahan yang berguna dari bash adalah array, kemampuan untuk mengatasi file dot dengan mudah, pipestatus
variabel untuk mendapatkan status pengembalian semua perintah dalam pipa, operator perbandingan tambahan untuk waktu file, dan (dalam versi terbaru) pencocokan ekspresi reguler .
Salah satu karakteristik pemrograman shell adalah Anda tidak hanya menggunakan sh
program, Anda juga menggunakan sejumlah utilitas . Sebagian besar utilitas manipulasi file dan pemrosesan teks di Linux adalah GNU coreutils (pada sistem embedded, biasanya dari BusyBox).
Jika Anda membutuhkan portabilitas di luar Linux, taruhan terbaik Anda adalah tetap menggunakan POSIX. Varian unix lain mungkin belum menginstal bash (bash adalah bagian dari instalasi standar pada OSX, tetapi paket opsional pada * BSD dan sebagian besar iklan komersial). Hampir semua varian unix selain Linux dan OSX (yaitu * BSD dan iklan komersial) memiliki beberapa versi shell Korn , setidaknya pdksh . Banyak ekstensi bash yang nyaman berasal dari ksh, jadi mungkin berguna untuk menulis skrip yang dapat berjalan di bawah keduanya, tetapi mendeteksi di mana bash atau ksh berada pada sistem yang tidak dikenal dapat sedikit menyebalkan.
Shell tidak bisa melakukan semuanya. Jika Anda membutuhkan bahasa yang lebih canggih, dua pilihan yang lebih umum adalah Perl dan Python (yang lainnya jauh di belakang sebagai bahasa skrip unix). Perl adalah bahasa scripting tradisional, dan beberapa sistem Linux non-embedded tidak memilikinya, tetapi Python mendapatkan dukungan (sebagian didorong dengan menjadi bahasa scripting yang disarankan untuk Ubuntu). Di dunia non-Linux, Perl adalah bagian dari instalasi dasar pada OSX dan OpenBSD; itu opsional tetapi sangat umum diinstal pada FreeBSD, dan opsional tetapi sering diinstal pada NetBSD.
sh
.