Istnieją dwa środowiska programistyczne, które są dostępne w każdym systemie operacyjnym podobnym do Uniksa, które są pełne Turinga i mogą wywoływać inne programy: awk i sh , rodzina powłok Bourne / POSIX. AWK jest zorientowany na przetwarzanie tekstu (uzupełnia bardziej wyspecjalizowane narzędzia), podczas gdy sh jest zorientowany na bycie językiem kleju do łączenia programów. Sh jest uniwersalnym językiem skryptowym na Linuksie i na całym świecie UNIX.
Standard POSIX określa obowiązkowe funkcje samego sh i powiązanych narzędzi. Większość systemów uniksowych jest zgodnych z POSIX 1003.1-2004 (aka Single Unix v3, aka Open Group Base Specification nr 6); najnowszą wersją tego standardu jest POSIX 1003.1-2008 (aka Single Unix v4, aka Open Group Base Specification Issue 7).
Każdy Linux i Unix lub system uniksowy ma na ścieżce powłokę w stylu Bourne'a /bin/sh
, a każdy nie-antyczny system ma powłokę zgodną z POSIX (z wyjątkiem sporadycznych błędów). Każdy nowoczesny system uniksowy (w tym Linux) obsługuje shebangi , więc automatycznie uruchamia skrypty, /bin/sh
jeśli pierwsza linia jest #!/bin/sh
. Istnieją systemy POSIX, w których sh
znajduje się w innym miejscu (zwykle warstwy emulacji w systemach operacyjnych, których nie można by uznać za naprawdę uniksowe).
Wbudowane systemy Linux mogą mieć uproszczony system BusyBox , który nie implementuje wszystkich funkcji POSIX. BusyBox ma wiele opcji czasu kompilacji, aby pomieścić systemy o niewielkich rozmiarach, więc trudno jest z góry wiedzieć, czego się spodziewać, musisz dostosować swoje skrypty do konkretnego urządzenia. BusyBox to najczęstsza implementacja sh i różnorodnych narzędzi; innym, z którym możesz się spotkać, jest ekstremalnie ograniczone środowisko powłoki w Androidzie (późniejsze wersje są mniej anemiczne).
Dla wbudowanych systemów Linux prawie zawsze mają albo myślnik lub bash jako /bin/sh
. Dash jest małą i szybką powłoką, która implementuje niewiele więcej niż funkcje POSIX. Bash to większa powłoka z większą liczbą funkcji.
W przypadku niewbudowanych systemów Linux prawie zawsze Bash jest zainstalowany jako /bin/bash
. Stąd, dla przenośności na niewbudowanych systemach Linux, możesz założyć, że bash jest dostępny. Wśród przydatnych dodatkowych funkcji bash są tablice, możliwość wygodnego radzenia sobie z plikami kropkowymi, pipestatus
zmienna umożliwiająca uzyskanie statusu zwracania wszystkich poleceń w potoku, dodatkowe operatory porównania czasów plików oraz (w najnowszych wersjach) dopasowanie wyrażeń regularnych .
Jedną z cech programowania powłoki jest to, że nie tylko używasz sh
programu, ale także używasz wielu narzędzi . Większość narzędzi do manipulacji plikami i przetwarzania tekstu w systemie Linux to jądra GNU (w systemach wbudowanych są one zwykle z BusyBox).
Jeśli potrzebujesz przenośności poza Linuksem, najlepiej jest trzymać się POSIX. Inne warianty uniksowe mogą nie mieć zainstalowanego basha (bash jest częścią standardowej instalacji w OSX, ale opcjonalny pakiet w * BSD i większości komercyjnych unikatów). Prawie wszystkie warianty uniksowe inne niż Linux i OSX (tj. * BSD i komercyjne jednorożce) mają pewną wersję powłoki Korna , przynajmniej pdksh . Wiele wygodnych rozszerzeń bash pochodzi z ksh, więc może być użyteczne pisanie skryptów, które mogą działać w obu systemach, ale wykrycie, gdzie bash lub ksh znajduje się w nieznanym systemie, może być trochę uciążliwe.
Powłoka nie może zrobić wszystkiego. Jeśli potrzebujesz bardziej wyrafinowanego języka, dwie bardziej popularne opcje to Perl i Python (wszystko inne jest daleko w tyle za językiem skryptowym unix). Perl jest tradycyjnym językiem skryptowym i brakuje go w kilku niewbudowanych systemach Linux, ale Python zyskuje na popularności (częściowo wzmocniony przez to, że jest zalecanym językiem skryptowym dla Ubuntu). W świecie innym niż Linux Perl jest częścią podstawowej instalacji na OSX i OpenBSD; jest opcjonalny, ale bardzo często instalowany na FreeBSD i opcjonalny, ale często instalowany na NetBSD.
sh
.