Lo primero es lo primero: no soy un experto (ni mucho menos) en la programación en shell, pero hace un tiempo me interese por ella e intenté aprender lo que pude de un libro y unos apuntes. El libro es ``UNIX shell programming'', de Stephen G. Kochan y Patrick H. Wood, de Hayden books UNIX system library (que a su vez pertenece a Prentice-Hall), ISBN 0-672-48448-X. Es necesario que consigas ese libro (que por otro lado es absolutamente genial) u otro si realmente necesitas saber programar bien en shell. Esto más que nada es una introducción a la programación, para hacer algunos programas sencillos y para hacerte una idea de cómo es programar en shell.
La programación en shell se basa en el uso de las herramientas del sistema, y el UNIX es un sistema operativo (UNIX y sus clones) que cuenta con bastantes herramientas de proceso y filtrado de textos y de control de procesos, entre otras. Por ello, permite automatizar procesos repetitivos, que hechos a mano serían engorrosos y lentos.
Para poder utilizar este tutorial hay que tener acceso a un
intérprete compatible con el sh
, como el propio sh
,
el Korn Shell o el bash
de Linux. También hay que tener una
cierta soltura con sistemas UNIX (saber lo que son los permisos de los
ficheros, conocer las órdenes básicas, etc.), y tener cierta
idea de las cosas que ofrece el intérprete (sustitución de
caracteres especiales por nombres de ficheros, redirecciones de las entradas y
salidas, etc.)
Para poder utilizar los conocimientos que pretende facilitar este tutorial,
hay que conocer el mayor número posible de herramientas del sistema,
como pueden ser el grep
, el wc
, sort
, tr
,
sed
, cut
y awk
(el awk
es casi un lenguaje
de programación aparte, aunque puede servir perfectamente como
complemento para la programación en shell. Hay un tutorial de
awk
muy bueno en algún sitio de INet, a donde tengo un enlace
en la página de UNIX).
Si estás acostumbrado o al menos conoces el MS-DOS, puedes pensar que la programación en shell es algo parecido a los ficheros BAT del primero, aunque la diferencia entre ellos es más o menos igual de grande que la existente entre los sistemas UNIX y el MS-DOS (por versatilidad, por potencia, por diseño ...).
También sería bastante bueno, en realidad más para manejar las herramientas del sistema que para la programación en shell en sí, que tuvieras conocimiento de las expresiones regulares (hay una pequeña lista en mi página de trucos de UNIX).
Y tú te preguntarás: ¿Por qué programar en shell y no en un lenguaje de alto nivel? Pues depende de para qué lo utilices. Lo mejor es saber las dos cosas y aplicarlas cuando sean más adecuadas. La programación en shell es muy útil y cómoda para crear programas fácilmente modificables, pequeños, que resuelvan tareas repetitivas, como por ejemplo comprobar ciertas condiciones cada cierto tiempo (ejecutándolos en segundo plano, claro), o para ejecutar órdenes muy largas con frecuencia (para no tener que escribir una orden larga o varias órdenes seguidas todo el tiempo)... Además, si el programa no requiere mucha potencia pero si comodidad a la hora de manejar ristras y procesar y filtrar texto, es mucho más fácil programar en shell, que, por ejemplo, en C.