El shell Bourne ( sh
) es una cáscara intérprete de línea de comandos para el ordenador sistemas operativos .
Autor (es) original (es) | Stephen Bourne |
---|---|
Desarrollador (es) | Laboratorios Bell Telephone |
Versión inicial | 1979 |
Sistema operativo | Unix |
Tipo | Shell de Unix |
Licencia | [ en discusión ] |
El shell Bourne era el shell predeterminado para la versión 7 de Unix . Unix de sistemas siguen teniendo /bin/sh
-que será el shell Bourne, o un enlace simbólico o enlace duro a un compatibles concha incluso cuando otros proyectiles son utilizados por la mayoría de los usuarios.
Desarrollado por Stephen Bourne en Bell Labs , fue un reemplazo del shell de 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 un 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 se consideran comúnmente 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.
Historia
Orígenes
El trabajo en el shell Bourne comenzó inicialmente en 1976. [1] Apareciendo por primera vez en la versión 7 de Unix , [2] el shell Bourne reemplazó al shell Mashey .
Algunos de los objetivos principales del caparazón fueron: [3]
- Para permitir que los scripts de shell se utilicen como filtros .
- Proporcionar capacidad de programación, incluido 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 cotización de cadenas.
- El mecanismo ambiental . Esto permitió que el contexto se estableciera al inicio y proporcionó una forma para que los scripts de shell pasaran contexto a los sub scripts ( procesos ) sin tener que usar parámetros posicionales explícitos .
Características de la versión original.
Las características del shell Bourne de UNIX Versión 7 incluyen:
- Los scripts se pueden invocar como comandos usando su nombre de archivo
- Puede usarse de forma interactiva o no interactiva
- Permite la ejecución de comandos tanto sincrónica como asincrónica
- Admite canalizaciones y redireccionamiento de entrada y salida
- Proporciona un conjunto de comandos integrados
- Proporciona construcciones de control de flujo, facilidades de cotización y funciones.
- Variables sin tipo
- Proporciona un alcance variable local y global
- Los scripts no requieren compilación antes de su ejecución.
- No tiene una función Goto, por lo que la reestructuración del código puede ser necesaria
- La sustitución de comandos utilizando comillas inversas :
`command`
. - Aquí se utilizan documentos
<<
para incrustar un bloque de texto de entrada dentro de un script. for ~ do ~ done
bucles, en particular el uso de$*
para recorrer los argumentos, así como losfor ~ in ~ do ~ done
bucles para iterar sobre listas.case ~ in ~ esac
mecanismo de selección, destinado principalmente a ayudar al análisis de argumentos .sh
proporcionó soporte para variables de entorno utilizando parámetros de palabras clave y variables exportables.- Contiene disposiciones sólidas para controlar la entrada y la salida y, en su expresión, facilidades de coincidencia .
El shell Bourne también fue el primero en presentar la convención de usar descriptor de archivos 2>
para mensajes de error , lo que permite un control programático mucho mayor durante la creación de scripts al mantener los mensajes de error separados de los datos.
El estilo de codificación de Stephen Bourne fue 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 reutilizado porciones de ALGOL 68 's , y "(usando en lugar de ) cláusulas en el común Unix sintaxis Bourne shell Por otra parte, -. Aunque la cáscara v7 está escrito en C - Bourne aprovechó algunas macros [4] para darle al código fuente de 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). [5]if ~ then ~ elif ~ then ~ else ~ fi
case ~ in ~ esac
for/while ~ do ~ od
done
od
Características introducidas después de 1979
A lo largo de los años, AT&T mejoró el caparazón de Bourne. Las diversas variantes se denominan así como la versión respectiva de AT&T Unix con la que se lanzó (algunas variantes importantes son Version7, SystemIII, SVR2, SVR3, SVR4). Como el shell nunca se versionó, la única forma de identificarlo era probando sus características. [6]
Las características de las versiones de shell Bourne desde 1979 incluyen: [7]
- Incorporado
test
comando - System III shell (1981) - # como carácter de comentario - shell System III (1981)
- Dos puntos en sustituciones de parámetros "$ {parámetro: = palabra}" - Shell System III (1981)
continue
con argumento - Shell System III (1981)cat <<-EOF
para documentos con sangría aquí - Shell System III (1981)- Funciones y la
return
estructura incorporada - SVR2 shell (1984) - Construido-ins
unset
,echo
,type
- shell SVR2 (1984) - Código fuente de-ALGOL68-ized - shell SVR2 (1984)
- Moderno "
$@
": carcasa SVR3 (1986) - Integrado
getopts
- Carcasa SVR3 (1986) - El manejo de parámetros limpiado permite funciones invocables recursivamente - shell SVR3 (1986)
- Limpieza de 8 bits - shell SVR3 (1986)
- Control de trabajos - shell SVR4 (1989)
- Compatibilidad con varios bytes: shell SVR4 (1989)
Variantes
Cáscara DMERT
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, utiliza una instantánea de 1978 de Bourne Shell "VERSIÓN sys137 FECHA 1978 12 de octubre 22:39:57 ". [ cita requerida ] El shell DMERT se ejecuta en computadoras 3B21D todavía en uso en la industria de las telecomunicaciones. [ cita requerida ]
Cáscara de korn
El shell Korn (ksh) escrito por David Korn basado en el código fuente original de Bourne Shell, [8] era un camino intermedio entre la cubierta Bourne y el C shell . Su sintaxis se extrajo principalmente del shell Bourne, mientras que sus funciones 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 reciente, ksh93, ha sido de código abierto desde 2000 y se usa en algunas distribuciones de Linux . Un clon de ksh88 conocido como pdksh es el shell predeterminado en OpenBSD.
Concha de Schily Bourne
Schily-Tools de Jörg Schilling incluye tres derivados de Bourne Shell. [9]
Relación con otras conchas
Cáscara de C
Bill Joy , el autor del shell C , criticó el shell Bourne por ser hostil para el uso interactivo, [10] una tarea para la que el propio Stephen Bourne reconoció la superioridad de C shell. Bourne declaró, sin embargo, que su shell era superior para la creación de scripts y estaba disponible en cualquier sistema Unix, [11] y Tom Christiansen también criticó la shell C por no ser adecuada para la creación de scripts y la programación. [12]
Conchas de almquist
Debido a problemas de derechos de autor que rodean a Bourne Shell, ya que se usó en versiones históricas de CSRG BSD, Kenneth Almquist desarrolló un clon de Bourne Shell, conocido por algunos como el shell Almquist y disponible bajo la licencia BSD , que se usa hoy en día en algunos BSD. descendientes y en situaciones de poca memoria. Almquist Shell fue portado a Linux, y el puerto renombrado como Debian Almquist shell , o dash. Este shell proporciona una ejecución más rápida de scripts estándar sh
(y estándar POSIX sh
, en los descendientes modernos) con una huella de memoria más pequeña que su contraparte, Bash. Su uso tiende a exponer bashismos : suposiciones centradas en bash hechas en scripts destinados a ejecutarse en sh.
Otras conchas
- Bash (el shell Bourne-Again ) se desarrolló en 1989 para el proyecto GNU e incorpora características del shell Bourne, csh y ksh. Está destinado a ser compatible con POSIX.
- rc fue creado en Bell Labs por Tom Duff como reemplazo de sh para la versión 10 de Unix . Es el shell predeterminado para Plan 9 de Bell Labs . Se ha portado a UNIX como parte del Plan 9 desde User Space .
- El shell Z , desarrollado por Paul Falstad en 1990, es un shell Bourne extendido con una gran cantidad de mejoras, incluidas algunas características de Bash , ksh y tcsh .
Uso
El shell Bourne alguna vez fue 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 POSIX sh
, los scripts de shell Bourne se pueden ejecutar normalmente con Bash o dash en Linux u otros sistemas similares a Unix.
Ver también
- Comparación de proyectiles de comando
- Shell de Unix
Referencias
- ^ https://www.bsdcan.org/2015/schedule/events/612.en.html Stephen Bourne Keynote para BSDCan 2015
- ↑ a b McIlroy, MD (1987). Un lector de investigación Unix: extractos comentados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
- ^ "El AZ de los lenguajes de programación: Bourne shell, o sh" . computerworld.com.au . Archivado desde el original el 11 de enero de 2010 . Consultado el 6 de marzo de 2009 .
- ^ Bourne, Steve (12 de enero de 1979). "mac.h - Macros utilizadas por Bourne para estructurar C como Algol68C" . Corporación AT&T . Consultado el 9 de septiembre de 2006 .
- ^ Landon Curt Noll ; Simon Cooper; Peter Seebach y Leonid A. Broukhis (2004). "Preguntas frecuentes del IOCCC - P / A: ¿Cómo se inició el IOCCC?" . www.ioccc.org . Consultado el 9 de septiembre de 2006 .
- ^ "qué caparazón es este" . www.in-ulm.de .
- ^ "Familia / historia y desarrollo tradicionales de la concha Bourne" . www.in-ulm.de .
- ^ Korn, David G. (26 de octubre de 1994), "ksh - An Extensible High Level Language" , Proceedings of the USENIX 1994 Very High Level Languages Symposium , USENIX Association , recuperado el 5 de febrero de 2015 ,
En lugar de inventar un nuevo lenguaje de escritura, creamos un sistema de entrada de formularios modificando el shell Bourne, agregando comandos integrados según sea necesario.
- ^ "Schily Bourne Shell - Una fuente Bourne Shell moderna mejorada y compatible con POSIX mantenida por Jörg Schilling" . Schily-Tools .
- ^ Una introducción al shell C por Bill Joy . [ página necesaria ]
- ^ Bourne, Stephen R. (octubre de 1983). "El Unix Shell" . BYTE . pag. 187 . Consultado el 30 de enero de 2015 .
- ^ Tom Christiansen (28 de septiembre de 1995). "Programación Csh considerada 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 conchas de Bourne tradicionales"
- Código fuente histórico de C para el shell Bourne usando macros mac.h de 1979
- Documentación original de Bourne Shell de 1978
- Un puerto del shell SVR4 Bourne "reliquia" de OpenSolaris a algunos otros sistemas similares a Unix
- Migración del Shell System V (SVR4) al Shell POSIX
- Tutorial de Bourne Shell (sintaxis)
- Preguntas frecuentes sobre las diferencias de shell
- Howard Dahdah, The A – Z of Programming Languages: Bourne shell, or sh - Una entrevista en profundidad con Steve Bourne, creador de Bourne shell, or sh , Computerworld , 5 de marzo de 2009.