Google
Web dns.bdat.net

La shell

Como dije en el punto anterior, la shell es el intérprete de órdenes de un sistema Unix. No hay que confundir la shell con el sistema operativo. El sistema operativo es el núcleo y la shell es un interfaz que nos proporciona utilidades de trabajo y permite establecer una relación con el núcleo. Es decir, la shell reconoce una serie de órdenes, las interpreta y lanza los procesos necesarios para su realización.

Hay diversos tipos de shells, cada una con sus características. Podemos citar:

Para desarrollar los contenidos que vienen a continuación voy a utilizar siempre las shell bash, y algún comentario ocasional con las diferencias con otras shell.

Metacaracteres de la shell

Existen ciertos caracteres que tienen un significado propio para la shell. La shell sabe interpretarlos para modificar algunos comportamientos. Estos caracteres son:

*

equivale a cualquier cadena de texto en un nombre de fichero

?

equivale a cualquier cadena de texto en un nombre de fichero

[ ]

evalúa una condición lógica

[! ]

evalúa una condición lógica negativa

|

Tubería, utiliza la salida de la orden de la izquierda, como entrada de la orden a la derecha

\

Protege el siguiente metacarácter para que la shell no lo interprete

&

Ejecuta un proceso en segundo plano

$

Extrae el contenido de una variable. Para usar el contenido de una variable tenemos que ponerle delante un $

>

redirige la salida estándar, creando un fichero nuevo borrando el existente

>>

redirige la salida estándar, creando un fichero nuevo o añadiendo al existente

2>

2>>

redirige la salida de errores, creando un fichero nuevo o añadiendo al existente

<

Redirige la entrada estándar

( )

Agrupación de órdenes.

&&

Y lógico entre órdenes

||

O lógico entre órdenes

*

Si en alguna ocasión nos interesa usar alguno de estos caracteres como literal, es decir, que la shell no lo interprete como carácter especial es necesario que esté precedido (protegido) por el carácter de escape \ (barra invertida).

Entrada y salida estándares y de errores

Un sistema Unix dispone de tres vías o canales para comunicarse con el exterior de forma estándar.

Una de ellas, la entrada estándar, se utiliza para introducir datos en la shell; de forma predeterminada está asociada al teclado.

La salida estándar, se utiliza para mostrar información y de forma predeterminada está asociada al monitor (consola). La salida estándar es donde vuelca la información de salida la ejecución de una orden.

Por último existe un canal dedicado a mostrar la salida de errores, que de forma predeterminada está asociado a la salida estándar. Cuando la ejecución de una orden falla por cualquier motivo, el sistema lo notifica a través de esta canal. Normalmente, como el canal va asociado a la salida estándar, los errores aparecen en panaalla.

En múltiples ocasiones nos puede interesar redirigir alguna de estas salidas a otro canal; para realizar esto disponemos de los metacaracteres :

<

redirige la entrada estándar. Podemos utilizar este metacarácter cuando queramos sustituir una serie de entradas por teclado por el contenido de un fichero. Unix tatra exactamente igual el teclado qe si fuera un fichero, él ve una serie de caracteres terminados en un retorno de carro.

>

redirige la salida estándar. Si esta redirección es a un fichero, lo crea nuevo en caso de que no exista, y si existe elimina su contenido previo. Un descuido con la redirección no puede hacer perder un fichero fácilmente

>>

redirige la salida estándar. Si esta redirección es a un fichero, y el fichero existe la añade al final de éste, y si no existe lo crea. Utilizando esta redirección podremos añadir fácilmente una línea a un fichero.

2>

redirige la salida de errores. Si esta redirección es a un fichero, lo crea nuevo en caso de que no exista, y si existe elimina su contenido previo.

2>>

redirige la salida de errores. Si esta redirección es a un fichero, y el fichero existe la añade al final de éste, y si no existe lo crea.

Veremos algunos ejemplos en los próximos capítulos.