Hay dos entornos de programación que están disponibles en todos los sistemas operativos tipo Unix, que son completos de Turing y que pueden llamar a otros programas: awk y sh , la familia de shell Bourne / POSIX. AWK está orientado hacia el procesamiento de texto (complementa las utilidades más especializadas), mientras que sh está orientado hacia ser un lenguaje adhesivo para unir programas. Sh es el lenguaje de script universal en Linux y en todo el mundo Unix.
El estándar POSIX define las características obligatorias de sh en sí y las utilidades asociadas. La mayoría de los sistemas tipo UNIX cumplen con POSIX 1003.1-2004 (también conocido como Single Unix v3, también conocido como el problema 6 de Open Group Base Specification); la última versión de ese estándar es POSIX 1003.1-2008 (también conocido como Single Unix v4, también conocido como Open Group Base Specification Issue 7).
Todos los sistemas Linux y Unix o Unix tienen un shell de estilo Bourne en el camino /bin/sh
, y cualquier sistema no antiguo tiene un shell compatible con POSIX (salvo el error ocasional). Todos los sistemas modernos tipo Unix (incluido Linux) son compatibles con shebangs , por lo que automáticamente ejecuta scripts /bin/sh
si la primera línea lo es #!/bin/sh
. Hay sistemas POSIX en los que sh
se ubica en otro lugar (generalmente, capas de emulación en sistemas operativos que no consideraría realmente como Unix).
Los sistemas Linux integrados pueden tener un sistema BusyBox simplificado que no implementa todas las funciones POSIX. BusyBox tiene una gran cantidad de opciones de tiempo de compilación para acomodar sistemas de tamaño reducido, por lo que es difícil saber qué esperar con anticipación, tiene que adaptar sus scripts a un dispositivo en particular. BusyBox es la implementación de huella pequeña más común de sh y una variedad de utilidades; otro que puede encontrar es el entorno de shell extremadamente reducido en Android (las versiones posteriores son menos anémicas).
Los sistemas Linux no integrados casi siempre tienen guiones o bash como /bin/sh
. Dash es un shell pequeño y rápido que implementa poco más que las funciones POSIX. Bash es un shell más grande con más características.
Los sistemas Linux no integrados casi siempre tienen Bash instalado como /bin/bash
. Por lo tanto, para la portabilidad en sistemas Linux no integrados, puede suponer que bash está disponible. Entre las características adicionales útiles de bash están las matrices, la capacidad de hacer frente a los archivos de puntos convenientemente, la pipestatus
variable para obtener el estado de retorno de todos los comandos en una tubería, operadores de comparación adicionales para tiempos de archivo y (en versiones recientes) coincidencia de expresiones regulares .
Una de las características de la programación de shell es que no solo estás usando el sh
programa, sino que también estás usando una serie de utilidades . La mayoría de las utilidades de manipulación de archivos y procesamiento de texto en Linux son los coreutils de GNU (en sistemas integrados, generalmente son de BusyBox).
Si necesita portabilidad más allá de Linux, su mejor opción es apegarse a POSIX. Es posible que otras variantes de Unix no tengan instalado bash (bash es parte de la instalación estándar en OSX, pero es un paquete opcional en * BSD y la mayoría de las unidades comerciales). Casi todas las variantes de Unix que no sean Linux y OSX (es decir, * BSD y unidades comerciales) tienen alguna versión del shell Korn , al menos pdksh . Muchas de las extensiones convenientes de bash son de ksh, por lo que puede ser útil escribir scripts que puedan ejecutarse en ambos, pero detectar dónde se encuentra bash o ksh en un sistema desconocido puede ser un poco complicado.
El caparazón no puede hacer todo. Si necesita un lenguaje más sofisticado, las dos opciones más comunes son Perl y Python (cualquier otra cosa está muy por detrás como un lenguaje de script Unix). Perl es el lenguaje de script tradicional, y pocos sistemas Linux no integrados carecen de él, pero Python está ganando terreno (impulsado en parte por ser el lenguaje de script recomendado para Ubuntu). En el mundo no Linux, Perl es parte de la instalación base en OSX y OpenBSD; es opcional pero muy comúnmente instalado en FreeBSD, y opcional pero a menudo instalado en NetBSD.
sh
.