Saltar al contenido principal

¿Qué es shell?

Descubre qué es shell y cómo aprenderlo puede convertirte en un científico de datos más eficiente y versátil.
23 abr 2024  · 13 min de lectura

Infografía de script

Si trabajas en un sistema operativo (SO) Microsoft, Apple o Linux, utilizas scripts de shell, quizá sin saberlo. En realidad, interactúas con shells cada vez que arrancas tu SO Linux. 

Los scripts de shell ayudan a programadores, científicos de datos y usuarios ocasionales a ahorrar tiempo y evitar tareas repetitivas con la automatización. Por ejemplo, los scripts pueden realizar copias de seguridad diarias, instalar parches, supervisar los sistemas y la actividad y realizar auditorías rutinarias. 

Los shells leen comandos listos para humanos bastante intuitivos y los convierten en algo que el sistema entiende. 

¿Qué es un shell?

Un shell es un tipo de programa informático llamado intérprete de comandos que permite a los usuarios de Linux y Unix controlar sus sistemas operativos con interfaces de línea de comandos. Los shells permiten a los usuarios comunicarse de forma eficiente y directa con sus sistemas operativos. 

Los scripts de shell no son un lenguaje único pero, como utilizan algunos comandos en lenguaje natural, son fáciles de aprender, incluso sin tener conocimientos de programación. Sin embargo, cada dialecto de scripts de shell se considera un lenguaje, y si planeas actividades más complejas, los shells requieren mucha práctica. 

Los scripts de shell son una de las formas más sencillas de configurar la automatización. Utilizando comandos Linux o Unix, los scripts de shell proporcionan a los científicos de datos y al personal de DevOps y TechOps estructuras de control condicionales y de bucle para repetir comandos.

Los scripts de shell no siempre tienen el mismo nombre. Sh, Bash (el más común) csh, y tesh son scripts de shell. Mientras que en el sistema operativo VM de IBM se llaman EXEC, en DOS los scripts de shell se llaman archivos batch. 

Un shell tiene dos categorías: shell de línea de comandos y shell gráfico. A los shells de línea de comandos se accede mediante interfaces de línea de comandos donde los sistemas reciben entrada en comandos legibles por humanos y luego utilizan las interfaces de línea de comandos para mostrar la salida. 

Los shells gráficos utilizan una interfaz gráfica de usuario (GUI) para realizar interacciones y operaciones esenciales como abrir, cerrar y guardar archivos. 

Aquí tienes algunos ejemplos de comandos de shell

Para saber en qué directorio estás: pwd

Para buscar un comando en el manual: man command 

Para que sea posible desplazarse en un archivo de texto: less file 1 o more file 1 

Diferentes tipos de shells

Shell Bourne

Por atractivo que sea el nombre, el shell Bourne no tiene nada que ver con espías ni persecuciones en coche a alta velocidad. El shell Bourne, el segundo shell Unix más utilizado, lo creó en 1979 Stephen Bourne en Bell Labs. Igual que en su predecesor, el shell Thompson, el nombre de archivo ejecutable de Bourne es sh.

El shell Bourne es el shell predeterminado del SO Solaris. A pesar de su antigüedad, el shell Bourne es popular hoy en día por su velocidad y por ser compacto. Sin embargo, el shell Bourne no es muy interactivo y no puede recuperar su command history.. También carece de expresión lógica y aritmética. 

Entre los prompts de Bourne se incluyen los siguientes:

  • Ruta completa de comando: /bin/sh y /sbin/sh
  • Valor predeterminado de usuario no root: $
  • Valor predeterminado de usuario root: #

línea de comandos

El shell C, nombre de archivo csh, y su nombre de archivo anterior tcsh, es otro shell Unix de finales de los 70. Lo creó Bill Joy, que en aquel momento era estudiante de posgrado en la Universidad de California en Berkeley. 

A diferencia del shell Bourne, el shell C es interactivo y reconoce command history y aliases. Los shells C también incluyen sintaxis de expresiones tipo C y aritmética integrada.

Entre los prompts de la línea de comandos se incluyen los siguientes: 

  • Ruta completa de comando: /bin/csh
  • Nombre de host predeterminado de usuario no root: %
  • Nombre de host predeterminado de usuario root: #

Shell Korn

El shell Korn, nombre de archivo ksh, lo desarrolló a principios de los 80 David Korn en Bell Labs. El shell Korn incluye muchas de las características del shell C, y es un superconjunto del shell Bourne, por lo que es retrocompatible con él. 

El shell Korn se ejecuta más rápidamente que el shell C. Ejecuta scripts del shell Bourne y dispone de matrices, funciones y funcionalidades de manipulación de cadenas tipo C. Además, incorpora aritmética integrada. 

Entre los prompts del shell Korn se incluyen los siguientes:

  • Ruta completa de comando: /bin/ksh
  • Valor predeterminado de usuario no root: $
  • Valor predeterminado de usuario root: #

Shell GNU Bourne-Again

El shell GNU Bourne-Again, o Bash, es una alternativa de código abierto al shell Bourne. Lo diseñó Brian Fox para el proyecto GNU y se publicó en 1989. No solo es totalmente compatible con el shell Bourne, sino que toma muchas de las mejores características de los shells Korn y C. El shell GNU Bourne-Again tiene teclas de flecha asignadas automáticamente para la edición y la recuperación de comandos. 

Entre los prompts de GNU Bourne-Again se incluyen los siguientes:

  • Ruta completa de comando: /bin/bash
  • Prompt predeterminado de usuario no root: bash-x.xx$ 
  • Valor predeterminado de usuario root: bash-x.xx#

Qué hacen los scripts de shell

Esta analogía es un poco simplista, pero imagina los scripts de shell como un autorrelleno para programadores. En lugar de escribir comandos en un teclado de uno en uno, el shell utiliza secuencias de comandos en scripts únicos que los usuarios pueden iniciar con un sencillo nombre de archivo en la línea de comandos. Los scripts de shell realizan ejecución de programas, ajuste de texto y manipulación de archivos. 

Los scripts de shell pueden realizar diferentes tareas, entre las que se incluyen tareas de supervisión como las de uso del disco, realización de copias de seguridad, creación de herramientas de comandos, manipulación de archivos, ejecución de programas, vinculación de programas, finalización de lotes, etc.

Principales alternativas al shell

En el sistema operativo VM de IBM, se llaman EXEC; en DOS, los scripts de shell se llaman archivos batch. Sin embargo, siguen siendo scripts de shell. Otros scripts, como Javascript, Python, Perl y TCL, también son scripts. No es de extrañar que los profesionales de la informática tengan sus favoritos, y dentro de un rato hablaremos de las ventajas y desventajas de los shells. 

¿Por qué shell es tan popular?

Los shells son habituales en casi todos los SO porque son eficientes y fácilmente actualizables. Supervisan el sistema de tu ordenador y realizan copias de seguridad rutinarias sin que tengas que pensar en ello. 

No es necesario cambiar de sintaxis, porque las sintaxis y los comandos de los shells son idénticos a los que se introducen en la línea de comandos. Además, escribir scripts de shell es fácil y rápido: se inician rápidamente y son fáciles de depurar. 

¿Cuáles son las desventajas de los scripts de shell?

Los scripts de shell pueden ser propensos a errores y difíciles de diagnosticar cuando surgen problemas. Los shells no están diseñados para tareas complejas o grandes, y su ejecución es lenta. Además, los shells no ofrecen mucha estructura de datos, y puede haber fallos de sintaxis o de diseño. 

¿Cuándo se creó shell?

El primer script de shell lo creó a principios de los años 60 Louis Pouzin, informático del MIT. Su primera línea de comandos fue RUNCOM, que liberó a los informáticos de tareas repetitivas como compilar, actualizar, renombrar y mover. 

Aunque Pouzin no era un experto en lenguajes informáticos, o quizá porque no lo era, creía que las líneas de comandos podían ser un lenguaje en sí mismas. 

A mediados de la década de 1960, Pouzin se asoció con el científico británico Christopher Strachey. Strachey diseñó un generador de macros que sirvió de base para el lenguaje de comandos de Pouzin, que se ejecutaba en lo que entonces era el sistema operativo Multics de última generación. 

De dónde viene el nombre de shell

Pouzin llamó "shell" a su nuevo lenguaje porque es la capa más superficial (concha) de los sistemas operativos. 

Características de shell

Los shells son populares entre los programadores porque son concisos. Sin embargo, eso no significa que sean básicos. Los shells ofrecen varias funciones, entre las que se encuentran las siguientes:

Procesamiento en segundo plano

Una de las mayores ventajas de los scripts de shell es que pueden ejecutarse en segundo plano. Dependiendo del comando, los shells pueden ejecutarse en primer o segundo plano. Los procesos en primer plano son visibles en la pantalla y solo pueden ejecutarse secuencialmente. 

Los procesos en segundo plano no aparecen en la pantalla y pueden ejecutarse de forma no secuencial. Para ejecutar un script de shell en segundo plano, los usuarios solo tienen que añadir un et (&) al final del script. 

Sustituciones comodín

Las sustituciones comodín permiten a los sistemas procesar más de un comando a la vez o buscar fragmentos de frases en archivos de texto. Por ejemplo, * indica al sistema que busque coincidencias en cualquier cadena, incluso en cadenas vacías. ? busca coincidencias de un solo carácter, [example] busca coincidencias de cualquier carácter ("example" es solo un ejemplo) y [1-9] (otro ejemplo) indica al shell que busque coincidencias de caracteres dentro del intervalo. 

Alias de comandos

Los alias de shell son comandos de acceso directo. Algunos alias son una sola palabra, y otros son una sola letra. Para ver la lista de alias, los usuarios solo tienen que introducir ·alias.

Historial de comandos

Los shells ahorran tiempo y esfuerzo de muchas formas, pero una función especialmente práctica es su historial de comandos. En lugar de tener que volver a escribir comandos, el comando history muestra todos los comandos que se utilizaron durante esa sesión.

Sustitución de nombres de archivo

La sustitución de nombres de archivo también se conoce como "globbing". Cuando una palabra contiene caracteres como ?, *, o [, o empieza por ~, el shell ve la palabra como un patrón y esta palabra se sustituye por una lista alfabética de nombres de archivo que coincidan con el patrón. 

Redirección de entrada/salida 

La redirección de entrada/salida (e/s) permite a los usuarios intercambiar la entrada estándar (stdin) y la salida estándar (stdout) para asociarlas a la pantalla, al teclado o a un archivo. 

Piping

El piping de shell es otro tipo de redirección que envía la salida de un comando/proceso/programa a otro comando/proceso/programa. Esto permite que los comandos/procesos/programas funcionen simultáneamente y permite la transferencia continua de datos sin tener que pasar por la pantalla de visualización o los archivos de texto temporales. 

Sustitución de variables de shell

Cuando el shell encuentra una expresión que contiene caracteres especiales, traduce el código a algo más reconocible para los usuarios. Ese proceso se denomina sustitución de variables o, simplemente, variables. 

Las variables también las utilizan programadores más avezados. Si, por ejemplo, un programador no conoce los valores reales antes de ejecutar un programa, puede utilizar la variable como marcador de posición antes de que el código esté listo para su ejecución. 

Cómo varían los shells

Hay dos tipos principales de shells, "shell" (sh) y "bash". Ambos se ejecutan en el sistema operativo Unix. Shell es un nombre genérico para los scripts de cualquier shell. Como su nombre indica, bash (Bourne Again Shell) es un shell mejorado y ampliado. 

Bash utiliza la up-gradation para una mayor funcionalidad, admite controles de trabajos, es más fácil de usar que sh y admite el historial de comandos. Sh no admite el historial de comandos; sus scripts funcionan en cualquier shell y es más portátil.  

Cómo ha evolucionado shell a lo largo de los años

A lo largo de los años, los shells han evolucionado y se han mantenido más o menos igual. El shell Bourne fue un gran paso adelante respecto al shell Thompson original, pero muchas de las funciones originales se mantienen. Por supuesto, los ordenadores y nuestras expectativas han cambiado. 

Pueden existir tantos shells como usuarios; pero, básicamente, hay dos tipos de shells: líneas de comandos o Bourne. Cualquier otra cosa es un dialecto, y no un lenguaje diferente. 

Shells Unix

Los shells Unix son los originales y siguen siendo fuertes. Los shells Unix funcionan en sistemas operativos Unix y relacionados con Unix, como los Mac.  

Líneas de comandos

Las líneas de comandos (csh) son los shells Unix más comunes. Las líneas de comandos destacan en el trabajo interactivo, como alias, cdpath, control de trabajos, hashing de ruta, pilas de directorios, etc. También ofrecen funciones de edición e historial.

Línea de comandos Tenex

La línea de comandos Tenex (tcsh) la desarrollór Ken Greer, de la Universidad Carnegie Mellon.  Tenex se consideró una mejora respecto a la versión original de la línea de comandos. A diferencia del C original, Tenex ofrece edición y finalización de la línea de comandos, entre otras funciones. En 1981, tsch se fusionó con csh. 

Shells Korn

Los shells Korn (ksh) son otro shell Unix, pero son una especie de compromiso entre el shell C y el shell Bourne, con retrocompatibilidad con este último. El shell Korn lo desarrolló a principios de los 80 por David Korn en Bell Labs. 

Shells Bourne Again

El shell Bourne Again (Bash) es un shell Unix de código abierto que escribió a finales de los 90 Brian Fox para el proyecto GNU como mejora del shell Bourne. 

Shells exóticos

Aunque todos se basan en shells C o Bourne, los programadores han diseñado cientos, si no miles, de dialectos diferentes. Algunos son útiles y otros, simplemente divertidos. 

¿Quién utiliza shell?

Casi cualquier persona que utilice un ordenador se beneficia del shell, pero es especialmente beneficioso para los administradores de sistemas, el personal de DevOps, los programadores y los científicos de datos. Los shells se utilizan para automatizar tareas y aplicaciones, instalar paquetes, hacer copias de seguridad de datos o restaurarlos y, por supuesto, programar. 

Ejemplos de shell

Los shells son tan básicos o tan complejos como desee el usuario. Un bash sencillo saludando, por ejemplo, es echo “hello $USER”, mientras que los scripts de shell complejos son casi ilimitados.  He aquí algunos ejemplos básicos: 

Ejemplo 1: Utilizar un bucle while en bash

Crea un archivo en bash utilizando un editor adecuado. Aquí utilizamos el editor vi.
 
$ vi example.sh
 
Esto abre un editor con un archivo llamado example.sh
Pulsa la tecla "i" para empezar a insertar el código:
#!/bin/bash
valid=true
count=1
while [ $valid ]
do
echo $count
if [ $count -eq 10 ];
then
break
fi
((count++))
done
Pulsa escape seguido de ":wq" para guardar y volver al terminal. 
Ejecutar utilizando bash example.sh 
Ejemplo 2:  Aceptar entradas del terminal creadas por los usuarios
 
Crea otro archivo en el editor vi: 
$vi example2.sh
 
Introduce el código en el editor:
#!/bin/bash
echo "Enter first number"
read x
echo "Enter second number"
read y
((sum=x+y))
echo "The result of addition = $sum"
Ejecutar utilizando bash example2.sh
 
Para aprender más comandos de shell útiles para la ciencia de datos, consulta este tutorial sobre Comandos de shell útiles.

Carreras profesionales con shell

Más que ser una carrera profesional, los scripts de shell son una herramienta útil del arsenal de un científico de datos. Profesionales de datos de todo tipo deben conocer varios lenguajes (o al menos deberían), y los scripts de shell los ayudan a utilizar los lenguajes de forma más eficiente. 

Aun así, algunas empresas tienen algunos puestos que requieren específicamente scripts de shell. El salario medio ronda los 78 000 dólares. Dicho esto, los scripts de shell son un componente básico de puestos como los de administrador de sistemas, que pueden reportar salarios de seis cifras. 

Conclusión

Shell es como una cadena que recorre todos los lenguajes de programación. Los comandos complejos se reducen a abreviaturas concisas e intuitivas. Comprender el shell es una habilidad importante para cualquier científico de datos o ingeniero informático. Aprende sobre Shell en el curso Introducción a shell de DataCamp. 

Preguntas frecuentes sobre shell

¿Qué es el kernel?

El kernel es la parte más esencial del sistema operativo. El kernel es responsable de asignar memoria y tiempo a los programas del ordenador, y gestiona las comunicaciones y el almacén de archivos en respuesta a las llamadas al sistema. 

¿Qué es el shell?

El shell es la interfaz entre el kernel y el usuario. 

¿Cuáles son las ventajas del shell?

Ya sabemos que el shell es eficiente y se encarga de muchas de las tareas aburridas de un usuario; pero, más allá de eso, los shells permiten a los usuarios personalizar los scripts para adaptarlos a sus propias necesidades. 

¿Cuáles son los inconvenientes del shell?

Un solo error puede resultar muy costoso y difícil de identificar. Además, los shells no son muy portátiles entre sistemas operativos. 

¿Cuál es la diferencia entre Unix y Linux?

Linux es un clon de Unix desarrollado por Linus Torvalds. Linux no es en sí mismo un sistema operativo; es un kernel. Sin embargo, Unix incluye el kernel, el shell y los programas. 

¿Qué shells se utilizan habitualmente en los sistemas Linux y Unix?

Bash, o el shell Bourne Again, es el shell más utilizado, pero tanto Linux como Unix admiten también líneas de comandos, shells Korn y TCSH.

¿Qué es la sintaxis de shell?

En el lenguaje natural, la sintaxis es la forma en la que se ordenan las palabras y las frases. La sintaxis de shell es muy similar; es el orden de las operaciones.

¿Qué es un intérprete?

Un intérprete traduce sentencias individuales a código máquina. 

¿Qué es un compilador?

Un compilador traduce los programas de alto nivel a un lenguaje de máquina más complejo. 

¿Cómo se ejecuta un archivo de shell?

Establece el permiso con: chmod+x script-name-here.sh

Después, ejecútalo con: ./script-name-here.sh o sh script-name-here.sh.

Temas
Relacionado
Data Science Concept Vector Image

blog

Cómo convertirse en científico de datos en 8 pasos

Descubre todo lo que necesitas saber para convertirte en un científico de datos, ¡y averigua si es la carrera adecuada para ti!

Jose Jorge Rodriguez Salgado

12 min

blog

¿Qué es la ciencia de datos? Definición, ejemplos, herramientas y más

La ciencia de datos es un campo interdisciplinar que utiliza métodos, procesos, algoritmos y sistemas científicos para extraer conocimientos e ideas de datos estructurados y sin estructurar.
Matt Crabtree's photo

Matt Crabtree

15 min

blog

¿Qué es R? Introducción a la potencia del cálculo estadístico

Aprende todo lo que necesitas saber sobre el lenguaje de programación R y descubre por qué es el lenguaje más utilizado en ciencia de datos.
Summer Worsley's photo

Summer Worsley

18 min

blog

Los mejores lenguajes de programación para los científicos de datos en 2023

¿Estás pensando en introducirte en la ciencia de datos, pero no sabes qué lenguaje de programación elegir? Aquí tienes todo lo que necesitas saber sobre los lenguajes de programación que liderarán el sector de la ciencia de datos en 2023.

blog

Científico de datos vs. Ingeniero de datos

Explicación de las diferencias entre ingenieros de datos y científicos de datos: responsabilidades, herramientas, lenguajes, perspectivas laborales, salario, etc.
Karlijn Willems's photo

Karlijn Willems

11 min

tutorial

Cómo escribir un Bash Script: Un sencillo tutorial de Bash Scripting

Descubre los fundamentos de las secuencias de comandos bash y aprende a escribir una secuencia de comandos bash.
Kurtis Pykes 's photo

Kurtis Pykes

5 min

See MoreSee More