Es gibt zwei Programmierumgebungen, die auf jedem Unix-ähnlichen Betriebssystem verfügbar sind, die Turing-complete sind und andere Programme aufrufen können: awk und sh , die Bourne / POSIX-Shell-Familie. AWK ist auf die Textverarbeitung ausgerichtet (es ergänzt spezialisiertere Dienstprogramme), während es auf die Zusammenstellung von Programmen ausgerichtet ist. Sh ist die universelle Skriptsprache unter Linux und auf der ganzen Unix-Welt.
Der POSIX- Standard definiert die obligatorischen Funktionen von sh selbst und den zugehörigen Dienstprogrammen. Die meisten Unix-ähnlichen Systeme entsprechen POSIX 1003.1-2004 (auch bekannt als Single Unix v3, Open Group Base Specification, Ausgabe 6). Die neueste Version dieses Standards ist POSIX 1003.1-2008 (auch bekannt als Single Unix v4, Open Group Base Specification Issue 7).
Jedes Linux- und Unix- oder Unix-ähnliche System hat eine Shell im Bourne-Stil am Pfad /bin/sh
, und jedes nicht-antike System hat eine POSIX-kompatible Shell (abgesehen von gelegentlichen Fehlern). Jedes moderne Unix-ähnliche System (einschließlich Linux) unterstützt Shebangs , sodass automatisch Skripts ausgeführt werden, /bin/sh
wenn die erste Zeile vorhanden ist #!/bin/sh
. Es gibt POSIX-Systeme, die sh
sich an einem anderen Ort befinden (normalerweise Emulationsebenen auf Betriebssystemen, die Sie nicht für wirklich Unix-artig halten würden).
Eingebettete Linux-Systeme verfügen möglicherweise über ein reduziertes BusyBox- System, das nicht alle POSIX-Funktionen implementiert. BusyBox bietet eine große Anzahl von Optionen zur Kompilierungszeit, um Systemen mit geringem Platzbedarf gerecht zu werden. Daher ist es schwierig, im Voraus zu wissen, was Sie erwartet. Sie müssen Ihre Skripte an ein bestimmtes Gerät anpassen. BusyBox ist die häufigste Implementierung von sh und verschiedenen Dienstprogrammen mit geringem Platzbedarf. Ein weiteres Problem ist die extrem reduzierte Shell-Umgebung in Android (spätere Versionen sind weniger anämisch).
Nicht eingebettete Linux-Systeme haben fast immer entweder Bindestrich oder Bash as /bin/sh
. Dash ist eine kleine und schnelle Shell, die kaum mehr als POSIX-Funktionen implementiert. Bash ist eine größere Shell mit mehr Funktionen.
Auf nicht eingebetteten Linux-Systemen wird Bash fast immer als installiert /bin/bash
. Daher können Sie für die Portabilität auf nicht eingebetteten Linux-Systemen davon ausgehen, dass bash verfügbar ist. Zu den nützlichen zusätzlichen Funktionen von bash gehören Arrays, die Möglichkeit, Punktdateien bequem zu verarbeiten, die pipestatus
Variable, mit der der Rückgabestatus aller Befehle in einer Pipeline abgerufen werden kann, zusätzliche Vergleichsoperatoren für die Dateizeiten und (in neueren Versionen) die Übereinstimmung mit regulären Ausdrücken .
Eines der Merkmale der Shell-Programmierung ist, dass Sie nicht nur das sh
Programm, sondern auch eine Reihe von Dienstprogrammen verwenden . Die meisten Dienstprogramme zur Dateibearbeitung und Textverarbeitung unter Linux sind GNU-Coreutils (auf eingebetteten Systemen sind sie normalerweise von BusyBox).
Wenn Sie Portabilität über Linux hinaus benötigen, halten Sie sich am besten an POSIX. Bei anderen Unix-Varianten ist Bash möglicherweise nicht installiert (Bash ist Teil der Standardinstallation unter OSX, aber ein optionales Paket unter * BSD und den meisten kommerziellen Unices). Fast alle Unix-Varianten außer Linux und OSX (dh * BSD und kommerzielle Unices) haben eine Version der Korn-Shell , zumindest pdksh . Viele der praktischen Erweiterungen von bash sind von ksh, daher kann es nützlich sein, Skripte zu schreiben, die unter beiden ausgeführt werden können. Es kann jedoch etwas mühsam sein, zu erkennen, wo sich bash oder ksh auf einem unbekannten System befinden.
Die Shell kann nicht alles. Wenn Sie eine anspruchsvollere Sprache benötigen, sind Perl und Python die beiden häufigsten Optionen (alles andere ist weit hinter einer Unix-Skriptsprache zurückgeblieben). Perl ist die traditionelle Skriptsprache, und es fehlt wenigen nicht eingebetteten Linux-Systemen, aber Python gewinnt an Boden (was teilweise durch die empfohlene Skriptsprache für Ubuntu unterstützt wird). In der Nicht-Linux-Welt ist Perl Teil der Basisinstallation unter OSX und OpenBSD. Es ist optional, wird aber sehr häufig unter FreeBSD und optional, aber häufig unter NetBSD installiert.
sh
.