El shell Bourne ( sh
) es un intérprete de línea de comandos de shell para sistemas operativos de computadora .
El shell Bourne era el shell predeterminado para la versión 7 de Unix . Los sistemas tipo Unix siguen teniendo /bin/sh
, que será el shell Bourne, o un enlace simbólico o un enlace físico a un shell compatible, incluso cuando la mayoría de los usuarios utilizan otros shells.
Desarrollado por Stephen Bourne en Bell Labs , fue un reemplazo del shell Thompson , cuyo archivo ejecutable tenía el mismo nombre sh
: . Fue lanzado en 1979 en la Versión 7 de Unix distribuida a colegios y universidades. Aunque se utiliza como intérprete de comandos interactivo, también fue pensado como un lenguaje de secuencias de comandos y contiene la mayoría de las características que comúnmente se consideran para producir programas estructurados.
Ganó popularidad con la publicación de The Unix Programming Environment de Brian Kernighan y Rob Pike , el primer libro publicado comercialmente que presentaba el shell como un lenguaje de programación en forma de tutorial.
El trabajo en el shell Bourne comenzó inicialmente en 1976. [1] Apareció por primera vez en la versión 7 de Unix , [2] el shell Bourne fue precedido por el shell Mashey .
Algunos de los objetivos principales del caparazón fueron: [3]
Las características de la versión 7 del shell UNIX Bourne incluyen:
`command`
.<<
para incrustar un bloque de texto de entrada dentro de un script.for ~ do ~ done
bucles, en particular el uso de $*
para recorrer argumentos, así como for ~ in ~ do ~ done
bucles para iterar sobre listas.case ~ in ~ esac
Mecanismo de selección, destinado principalmente a ayudar en el análisis de argumentos .sh
proporcionó soporte para variables de entorno utilizando parámetros de palabras clave y variables exportables.El shell Bourne también fue el primero en presentar la convención de usar descriptores de archivos 2>
para mensajes de error , lo que permite un control programático mucho mayor durante la secuencia de comandos al mantener los mensajes de error separados de los datos.
El estilo de codificación de Stephen Bourne estuvo influenciado por su experiencia con el compilador ALGOL 68C [2] en el que había estado trabajando en la Universidad de Cambridge . Además del estilo en el que se escribió el programa, Bourne reutilizó partes de las cláusulas ALGOL 68 y " (usando en lugar de ) en la sintaxis común del shell Bourne de Unix . Además, aunque el shell v7 está escrito en C , Bourne aprovechó algunas macros [4] para darle al código fuente C un sabor ALGOL 68. Estas macros (junto con el comando finger distribuido en Unix versión 4.2BSD ) inspiraron el Concurso Internacional de Código C Ofuscado (IOCCC) .if ~ then ~ elif ~ then ~ else ~ fi
case ~ in ~ esac
for/while ~ do ~ od
done
od
Con el paso de los años, el shell Bourne fue mejorado en AT&T. Las diversas variantes se denominan así como la respectiva versión de AT&T Unix con la que se lanzó (algunas variantes importantes son Version7, System III, SVR2, SVR3, SVR4). Como el shell nunca tuvo una versión, la única forma de identificarlo era probando sus características. [6]
Las características de las versiones Bourne Shell desde 1979 incluyen: [7]
test
: shell System III (1981)continue
con argumento - System III shell (1981)cat <<-EOF
para documentos sangrados aquí - System III shell (1981)return
integrados: shell SVR2 (1984)unset
, echo
, type
- Carcasa SVR2 (1984)$@
" - Carcasa SVR3 (1986)getopts
: carcasa SVR3 (1986)Duplex Multi-Environment Real-Time ( DMERT ) es un sistema operativo híbrido de tiempo compartido/tiempo real desarrollado en la década de 1970 en la ubicación de Bell Labs Indian Hill en Naperville, Illinois, y utiliza una instantánea de 1978 de Bourne Shell "VERSIÓN sys137 FECHA 1978 12 de octubre 22:39:57". [ cita necesaria ] El shell DMERT se ejecuta en computadoras 3B21D que todavía se utilizan en la industria de las telecomunicaciones. [ cita necesaria ]
El shell Korn (ksh) escrito por David Korn basado en el código fuente original de Bourne Shell, [8] era un camino intermedio entre el shell Bourne y el shell C. Su sintaxis se extrajo principalmente del shell Bourne, mientras que sus características de control de trabajos se parecían a las del shell C. La funcionalidad del Korn Shell original (conocido como ksh88 desde el año de su introducción) se utilizó como base para el estándar de shell POSIX . Una versión más nueva, ksh93, es de código abierto desde 2000 y se utiliza en algunas distribuciones de Linux . Un clon de ksh88 conocido como pdksh es el shell predeterminado en OpenBSD.
Schily-Tools de Jörg Schilling incluye tres derivados de Bourne Shell. [9]
Bill Joy , el autor del shell C , criticó el shell Bourne por ser poco amigable para el uso interactivo, [10] una tarea para la cual el propio Stephen Bourne reconoció la superioridad del shell C. Bourne afirmó, sin embargo, que su shell era superior para scripting y estaba disponible en cualquier sistema Unix, [11] y Tom Christiansen también criticó el shell C por ser inadecuado para scripting y programación. [12]
Debido a problemas de derechos de autor relacionados con Bourne Shell tal como se usó en lanzamientos históricos de CSRG BSD, Kenneth Almquist desarrolló un clon de Bourne Shell, conocido por algunos como Almquist Shell y disponible bajo la licencia BSD , que se usa hoy en día en algunos BSD. descendientes y en situaciones de baja memoria. El Almquist Shell fue portado a Linux y el puerto pasó a llamarse Debian Almquist Shell , o guión. Este shell proporciona una ejecución más rápida de scripts estándar sh
(y estándar POSIX sh
, en sus descendientes modernos) con una huella de memoria menor que su contraparte, Bash. Su uso tiende a exponer bashismos : suposiciones centradas en bash hechas en scripts destinados a ejecutarse en sh.
El shell Bourne alguna vez fue estándar en todos los sistemas Unix , aunque históricamente los sistemas basados en BSD tenían muchos scripts escritos en csh . Como base de la sintaxis POSIX sh
, los scripts de shell Bourne normalmente se pueden ejecutar con Bash o dash en Linux u otros sistemas similares a Unix .
En lugar de inventar un nuevo lenguaje de escritura, construyó un sistema de entrada de formularios modificando el shell Bourne y agregando comandos integrados según sea necesario.