Sep 132007
 

Siguiendo el hilo de lo que decíamos en un mensaje del foro, no es imprescindible que un fotógrafo sepa nada de bash, pero para el que quiera aprender, igual le puede llegar a resultar útil, aunque solo sea para enmarcar fácilmente sus fotos preferidas :)

Aunque la idea surgió en el foro, dado que la temática se aparta un poco de lo que es en esencia fotolibre.net; he preferido no poner esto en el foro, sino en mi blog. Pero como quiero que sea algo interactivo, y sé que surgiran dudas, puntualizaciones, y correcciones el hilo en el foro está abierto para cualquier clase de comentarios….

Introducción:

Este curso está destinado a usuarios noveles de Linux, no se requieren conocimientos especiales. Si has instalado Linux en tu ordenador y lo usas podrás seguir este curso sin problemas. El curso irá adentrándose en el conocimiento de la shell más habitual en Linux, el bash, partiendo desde cero. El objetivo es que al final seas capaz de utilizar bash en modo interactivo, con comandos simples y complejos, de configurarlo, e incluso de escribir tus propios scripts.

Es conveniente que se tenga a mano un ordenador con Linux donde probar los ejemplos que se irán dando a lo largo del curso, así se podrá comprobar y comprender mejor todos los conceptos. Se puede usar el bash en windows, pero dado que la shell está tan ligada a una serie de utilidades gnu yo recomiendo encarecidamente que se haga desde Linux. No obstante y si ello no fuese posible, aconsejo la instalación de cygwin. Cygwin es una colección de herramientas, que incluye, por supuesto, bash, desarrollada por Cygnus Solutions para proporcionar un comportamiento similar a los sistemas Unix en Windows. La compatibilidad no está asegurada al 100% pero creo que la mayoría de los ejemplos propuestos funcionaran sin problemas y los menos lo harán con muy pocos cambios.

¿Que es la SHELL?

Un es el programa que sirve de intermediario entre la máquina por una parte, y los programas de aplicación o el usuario por otra. La shell es en los entornos UNIX la capa de del sistema operativo que sirve de interfaz con el usuario en modo texto. Es el ‘interprete de comandos’, su misión es analizar lo que le tecleamos e interpretarlo para ordenarle al sistema operativo lo que debe hacer.

La palabra inglesa ‘shell’ significa concha, caparazón o cáscara, lo cual parece no guardar mucha relación con la definición anterior. La historia de Unix comienza a mediados de los 60 cuando se crea el sistema operativo MULTICS (MULtiplexed Information and Computer Service) en los laboratorios Bell. Multics fue un fracaso, pero un ingeniero de Bell, Brian Kernighan, necesitaba un sistema operativo para un PDP 7, y tomando ideas de MULTICS, inició el desarrollo de uno menos ambicioso, y le llamó UNICS, luego se cambiaría la terminación CS por una X, que en inglés suenan igual. En el MULTICS al interfaz de usuario ya se le llamaba shell porque no creaba nuevos procesos cuando ejecutaba programas de usuario, simplemente los enlazaba dinámicamente y los llamaba como si fuesen una rutina propia; de ahí parece venir su nombre, era como un programa esqueleto o caparazón.

Siguiendo con un poco de historia, el Unix de Brian Kernighan fue mejorado por Dennis Ritchie y Ken Thompson de AT&T, el interprete de comandos utilizado era el sh, también conocido como Bourne Shell, escrito por Stephen Bourne. Poco más tarde la Free Software Foundation buscaba un interprete de comandos para su sistema operativo GNU, no podían utilizar la shell de Bourne porque su licencia no era del todo libre, y así se escribió la llamada ‘Bourne Again Shell’ (La shell de Bourne de nuevo) más conocida por sus iniciales BASH, que mejoraba y ampliaba a la shell original de Bourne. Hoy en día, aunque que existen otras muchas alternativas, csh, ksh, zsh, tcsh… la shell bash es la más usada en Linux.

Toda esta historia está muy bien para ponernos en antecedentes pero todavía no he contestado a la pregunta que da título a este capítulo: ¿Que es la shell?. Podemos definir una shell como un intérprete que ejecuta las órdenes escritas en un lenguaje específico que el usuario le proporciona o que lee desde un fichero. Así que si queremos dominar el manejo de la shell debemos conocer bien la sintaxis del lenguaje que utiliza, y ese es el objetivo de este curso.

En la definición anterior queda claro que la shell tiene dos modos de funcionamiento, uno en el que el usuario le proporciona las ordenes escribiéndolas directamente, a este modo le llamaremos ‘shell en modo interactivo’, y otro en el que la shell lee e interpreta las ordenes que previamente fueron escritas en un fichero. Al fichero dónde se guardan las ordenes que luego serán interpretadas por una shell en modo no interactivo se le llama ‘script de shell’, y es un fichero de texto que podemos crear con cualquier editor.

¿Porqué es interesante conocer la shell?

‘En el principio fue la línea de comando’, es el título de una obra de Neal Stephenson sobre Linux. Que gran verdad hay en ese título que parafrasea al Génesis de la biblia.

Lo cierto es que así era, cuando se planteó la necesidad de que los ordenadores tuviesen sistemas operativos, la única forma de que el hombre se relacionara de una forma fácil con la máquina era la línea de comando. Los tiempos han cambiado mucho. Grandes avances en el software y en el hardware, hacen posible que, hoy en día, la línea de comando esté empezando a usarse menos. Gracias a los maravillosos entornos gráficos de que disponemos podemos hacer muchas tareas de forma intuitiva, y sin necesidad de aprender ningún lenguaje de comandos. No obstante todavía quedan muchos ‘gurús’ que prefieren hacerlo todo prescindiendo de esos entornos gráficos. Yo no estoy en ninguno de los dos extremos, uso ambas cosas, para ciertas cosas me parece mucho más cómodo el entorno gráfico, pero hay ciertas otras que prefiero hacerlas con comandos, y considero que hay cosas que en un entorno gráfico son mucho más complicadas de hacer que con un comando.

A ver: el que esté limpio de pecado que tire la primera piedra. ¿Quien de vosotros nunca ha usado la línea de comandos? ya sea en Linux o en otro sistema operativo. Creo que nadie, todos hemos necesitado meter un comandillo de vez en cuando.

Muchos podéis pensar que más o menos ya os defendéis con la shell, que con lo que sabes ya os basta. Bueno, es posible, pero si no intentáis aprender un poco más nunca sabréis lo que os estáis perdiendo.

Pienso que pese a que los entornos gráficos nos facilitan multitud de tareas, necesitamos la línea de comandos. Para poder usar adecuadamente la línea de comandos debemos conocer bien el lenguaje de la shell. Si conocemos bien el lenguaje, le perderemos el miedo. Si conocemos bien el lenguaje podremos hacer tareas que nos parecían muy complicadas de forma muy sencilla. Si conocemos bien el lenguaje evitaremos cometer muchos errores que nos darán más de un quebradero de cabeza.

Por otra parte, el lenguaje de la shell de Linux es muy potente, nada comparable al lenguaje de comandos de los sistemas operativos tipo DOS. ¿Por qué usar algo tan potente solo a su 10%?. ¡He visto hasta un programa de contabilidad escrito en lenguaje de bash! Si no tenemos idea de programación, este puede ser un buen comienzo, el conocer el lenguaje de la shell nos permitirá hacer nuestros primeros programas, y puede ser una especie de iniciación que luego nos lleve a conocer lenguajes de programación más potentes todavía. Si ya programamos en otros lenguajes, conocer la shell nos puede ser muy útil para realizar programas sencillos, que no merece la pena escribir en algún lenguaje compilado, y que sabemos que funcionarán en cualquier Linux, (y hasta en cualquier Unix) porque todo Unix tiene una shell.

Recuerdo que uno de mis primeros escarceos con la shell fue un script para mantener mi colección de palíndromos. Soy aficionado a los palíndromos, esas frases que son iguales si las lees al derecho que al revés. Tengo un archivo de texto con más de 2000, el script en cuestión solo son 24 líneas, y me permite añadir frases a mano o procedentes de un archivo, comprobando que efectivamente sean palíndromos, y que no estén ya repetidas. Estoy seguro de que a medida que vayáis conociendo la shell, y sobre todo cuando empecemos a hacer scripts, le iréis encontrando multitud de aplicaciones…

Cualquier duda, consulta, opinión sobre este tema hazla en este hilo del foro de la Comunidad FotoLibre. Las criticas no constructivas redireccionaleas directamente a /dev/null :)