El intérprete de comandos Bourne ( sh) es un intérprete de línea de comandos para sistemas operativos de computadora . Apareció por primera vez en la versión 7 de Unix , como su intérprete de comandos predeterminado . Los sistemas tipo Unix continúan teniendo —que será el intérprete de comandos Bourne, o un enlace simbólico o un enlace físico a un intérprete de comandos compatible— incluso cuando la mayoría de los usuarios utilizan otros intérpretes de comandos./bin/sh
El intérprete de comandos Bourne fue en su momento estándar en todos los sistemas Unix de marca , aunque históricamente los sistemas basados en BSD tenían muchos scripts escritos en csh . Como base de la sintaxis POSIXsh , los scripts de Bourne se pueden ejecutar normalmente con Bash o dash en Linux u otros sistemas tipo Unix; Bash es un clon gratuito de Bourne.
Historia

Orígenes
El trabajo en el intérprete de comandos Bourne comenzó inicialmente en 1976. [ 1 ] Desarrollado por Stephen Bourne en Bell Labs , fue un reemplazo para el intérprete de comandos Thompson , cuyo archivo ejecutable tenía el mismo nombre sh. El intérprete de comandos Bourne también fue precedido por el intérprete de comandos Mashey . Bourne se lanzó 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 concebido como un lenguaje de scripting 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 la consola como un lenguaje de programación en forma de tutorial.
Algunos de los objetivos principales de la estructura eran: [ 2 ]
- Para permitir que los scripts de shell se utilicen como filtros .
- Para proporcionar programabilidad, incluyendo el flujo de control y las variables .
- Control sobre todos los descriptores de archivos de entrada/salida .
- Control sobre el manejo de señales dentro de los scripts.
- No hay límites en la longitud de las cadenas al interpretar scripts de shell.
- Racionalizar y generalizar el mecanismo de comillas de cadenas.
- El mecanismo de entorno . Esto permitió que el contexto se estableciera al inicio y proporcionó una forma para que los scripts de shell pasaran el contexto a los subscripts ( procesos ) sin tener que usar parámetros posicionales explícitos .
Características de la versión original
Las características de la shell Bourne de UNIX versión 7 incluyen:
- Los scripts se pueden invocar como comandos utilizando su nombre de archivo.
- Puede utilizarse de forma interactiva o no interactiva.
- Permite la ejecución de comandos tanto síncrona como asíncrona.
- Admite la redirección de entrada y salida y las tuberías.
- Proporciona un conjunto de comandos integrados.
- Proporciona estructuras de control de flujo y servicios de cotización.
- Variables sin tipo
- Proporciona un alcance variable local y global.
- Los scripts no requieren compilación antes de su ejecución.
- No tiene función de ir a, por lo que puede ser necesario reestructurar el código.
- Sustitución de comandos mediante comillas invertidas :
`command`. - Aquí se documenta cómo insertar un bloque de texto de entrada dentro de un script.
<< for ~ do ~ donebucles, en particular el uso de$*bucles para iterar sobre argumentos, así comofor ~ in ~ do ~ donebucles para iterar sobre listas.case ~ in ~ esacmecanismo de selección, destinado principalmente a ayudar al análisis de argumentos .shSe proporcionó soporte para variables de entorno mediante parámetros de palabras clave y variables exportables.- Contiene sólidas disposiciones para el control de entrada y salida y en sus funciones de coincidencia de expresiones .
El intérprete de comandos Bourne fue también el primero en incorporar la convención de usar descriptores de archivo para los mensajes de error , lo que permitió un control programático mucho mayor durante la creación de scripts al mantener los mensajes de error separados de los datos.2>
Influencia de Algol 68C
El estilo de codificación de Stephen Bourne estuvo influenciado por su experiencia con el compilador ALGOL 68C [ 3 ] 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 de 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 toque de ALGOL 68. if ~ then ~ elif ~ then ~ else ~ ficase ~ in ~ esacfor/while ~ do ~ oddoneod El dialecto resultante de C ha sido apodado "Bournegol". [ 5 ] Un ejemplo de "Bournegol" de cmd.c: [ 6 ]
Término TREPTR LOCAL ( flg ) { REG TREPTR t ;reserva ++ ; SI flg & NLFLG ENTONCES skipnl (); SINO word (); FISI ( t = item ( VERDADERO )) Y ( wdval == '^' O wdval == '|' ) ENTONCES devolver ( makelist ( TFIL , makefork ( FPOU , t ), makefork ( FPIN | FPCL , term ( NLFLG )))); SINO devolver ( t ); FIN }Estas macros (junto con el comando finger distribuido en la versión 4.2BSD de Unix ) inspiraron el Concurso Internacional de Código C Ofuscado (IOCCC). [ 7 ]
Características introducidas después de 1979
Con el paso de los años, el shell Bourne fue mejorado en AT&T. Por ello, las distintas variantes se denominan según la versión de AT&T Unix con la que se lanzaron (algunas variantes importantes son Version7, System III, SVR2, SVR3, SVR4). Dado que el shell nunca tuvo versiones, la única forma de identificarlo era probando sus características. [ 8 ]
Las características de las versiones de Bourne Shell desde 1979 incluyen: [ 9 ]
- Comando integrado
test: shell del sistema III (1981) - # como carácter de comentario – Shell System III (1981)
- Dos puntos en las sustituciones de parámetros "${parameter:=word}" – Shell System III (1981)
continuecon argumento – Shell del Sistema III (1981)cat <<-EOFpara documentos aquí indentados – Shell del Sistema III (1981)- Funciones y el
returnshell SVR2 integrado (1984) - Componentes integrados
unset,echo,type– Carcasa SVR2 (1984) - Código fuente optimizado para ALGOL68 – Shell SVR2 (1984)
- Moderna "
$@" – Carcasa SVR3 (1986) - Carcasa integrada
getoptsSVR3 (1986) - La gestión de parámetros optimizada permite la llamada recursiva de funciones – Shell SVR3 (1986)
- Limpieza de 8 bits – Shell SVR3 (1986)
- Control de trabajos – Shell SVR4 (1989)
- Compatibilidad con múltiples bytes: shell SVR4 (1989)
Variantes
shell DMERT
Duplex Multi-Environment Real-Time ( DMERT ) es un sistema operativo híbrido de tiempo compartido y tiempo real desarrollado en la década de 1970 en Bell Labs, en la sede de Indian Hill en Naperville, Illinois. Utiliza una instantánea de 1978 de Bourne Shell "VERSION sys137 DATE 1978 Oct 12 22:39:57". El intérprete de comandos DMERT se ejecuta en computadoras 3B21D que aún se utilizan en la industria de las telecomunicaciones.
cáscara de maíz

El intérprete de comandos Korn (ksh), escrito por David Korn basándose en el código fuente original del Bourne Shell, [ 10 ] representó un punto intermedio entre el Bourne Shell y el C Shell . Su sintaxis se basó principalmente en el Bourne Shell, mientras que sus funciones de control de procesos se asemejaban a las del C Shell. La funcionalidad del Korn Shell original (conocido como ksh88 desde el año de su introducción) sirvió de base para el estándar de shell POSIX . Una versión más reciente, ksh93, es de código abierto desde el año 2000 y se utiliza en algunas distribuciones de Linux . Un clon de ksh88, conocido como pdksh, es el intérprete de comandos predeterminado en OpenBSD.
Schily Bourne Shell
Schily-Tools de Jörg Schilling incluye tres derivados de Bourne Shell. [ 11 ]
Relación con otras conchas
C shell
Bill Joy , autor del intérprete de comandos C, criticó el intérprete de comandos Bourne por ser poco amigable para el uso interactivo, [ 12 ] una tarea para la cual el propio Stephen Bourne reconoció la superioridad del intérprete de comandos C. Sin embargo, Bourne afirmó que su intérprete de comandos era superior para la creación de scripts y estaba disponible en cualquier sistema Unix, [ 13 ] y Tom Christiansen también criticó el intérprete de comandos C por ser inadecuado para la creación de scripts y la programación. [ 14 ]
conchas de Almquist
Debido a problemas de derechos de autor relacionados con Bourne Shell, tal como se usaba en versiones históricas 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 actualmente en algunos descendientes de BSD y en situaciones de poca memoria. Almquist Shell se portó a Linux, y la versión se renombró como Debian Almquist Shell o dash. Este intérprete de comandos proporciona una ejecución más rápida de scripts estándar sh(y estándar POSIX sh, en descendientes modernos) con un menor consumo de memoria que su contraparte, Bash. Su uso tiende a exponer bashismos : suposiciones centradas en bash hechas en scripts diseñados para ejecutarse en sh.
Otras conchas
- Bash (el intérprete de comandos Bourne-Again ) se desarrolló en 1989 para el proyecto GNU e incorpora características de los intérpretes de comandos Bourne, csh y ksh. Está diseñado para cumplir con el estándar POSIX.
- rc fue creado en Bell Labs por Tom Duff como reemplazo de sh para la versión 10 de Unix . Es el intérprete de comandos predeterminado para Plan 9 de Bell Labs . Ha sido adaptado a UNIX como parte de Plan 9 desde User Space .
- Z shell , desarrollado por Paul Falstad en 1990, es una extensión de Bourne shell con un gran número de mejoras, incluyendo algunas características de Bash , ksh y tcsh .
Véase también
Referencias
- ↑ https://www.bsdcan.org/2015/schedule/events/612.en.html Conferencia magistral de Stephen Bourne para BSDCan 2015
- ↑ "El AZ de los lenguajes de programación: Bourne shell" . computerwoche.de . Archivado del original el 18 de diciembre de 2025. Consultado el 28 de junio de 2026 .
- ↑ McIlroy, MD (1987). Un lector de Research Unix: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139. Archivado (PDF) del original el 4 de mayo de 2014.
- ↑ Bourne, Steve (12 de enero de 1979). "mac.h – Macros utilizadas por Bourne para estructurar C como Algol68C" . AT&T Corporation . Recuperado el 9 de septiembre de 2006 .
- ↑ Peek, Jerry; O'Reilly, Tim; Loukides, Michael Kosta (1997). "46.6 Cuidado con el error Bourne Shell-e". Herramientas avanzadas de Unix (2.ª ed.). Cambridge Paris: O'Reilly. ISBN 1-56592-260-3Consultado el 21 de mayo de 2026 .
- ↑ SR Bourne (1979). "Unix shell" . www.tuhs.org . Bell Telephone Laboratories . Consultado el 21 de mayo de 2026 .
- ↑ Landon Curt Noll ; Simon Cooper; Peter Seebach y Leonid A. Broukhis (2004). "Preguntas frecuentes del IOCCC: ¿Cómo se fundó el IOCCC?" . ioccc.org . Consultado el 9 de septiembre de 2006 .
- ↑ "¿Qué carcasa es esta?" . www.in-ulm.de .
- ↑ "Familia tradicional de conchas Bourne / historia y desarrollo" . www.in-ulm.de
- ↑ Korn, David G. (26 de octubre de 1994), "ksh - Un lenguaje de alto nivel extensible" , Actas del Simposio de Lenguajes de Muy Alto Nivel USENIX 1994 , Asociación USENIX , consultado el 5 de febrero de 2015 ,
En lugar de inventar un nuevo lenguaje de script, construimos un sistema de entrada de formularios modificando el shell Bourne, agregando comandos integrados según fuera necesario.
- ↑ "Schily Bourne Shell - Una fuente Bourne Shell moderna, mejorada y compatible con POSIX mantenida por Jörg Schilling" . codeberg.org . Consultado el 3 de diciembre de 2025 .
- ↑ Una introducción al shell C Archivado el 13 de julio de 2018 en Wayback Machine por Bill Joy .
- ↑ Bourne, Stephen R. (octubre de 1983). "The Unix Shell" . BYTE . pág. 187. Consultado el 30 de enero de 2015 .
- ↑ Tom Christiansen (28 de septiembre de 1995). "La programación en Csh se considera perjudicial" . Consultado el 17 de febrero de 2014 .
Enlaces externos
- Los miembros individuales de "La Familia Tradicional de Bourne Shell"
- "Propiedades comunes características de las cáscaras Bourne tradicionales"
- Código fuente histórico en C para el intérprete de comandos Bourne utilizando macros mac.h de 1979.
- shells de Unix
- Software de 1979
- POSIX
- Lenguajes de scripting
- Lenguajes de programación orientados a texto
- Utilidades Unix SUS2008