¡Gracias por visitar Tecno Academy!                     Informática, todos los niveles - Trucos - Apuntes - Diapositivas - Libros - Enlaces - Curiosidades - Descargas - Tecnologías - Opiniones - Podcasting, Byte - Internautas TV - Pizarra Virtual                   

lunes, 8 de octubre de 2007

Shell scripting en Linux I. El sha-bang o número mágico

Se denomina "sha-bang" a la secuencia #! con la que se inician los scripts. Su función es indicarle al sistema que se trata de un conjunto de comandos para que sean interpretados. En realidad, es un número mágico de dos bytes (¡bueno, hay excepciones!, en los sistemas basados en 4.2BSD lo habitual es que el número mágico sea de cuatro bytes, siendo necesarios blancos a la derecha del símbolo !). El número mágico es un marcador especial para indicar el tipo de archivo, en este caso, indica que se trata de un script de shell ejecutable. Podéis ejecutar un man magic para más detalles sobre este tópico fascinante pero para los perezosos os adelanto que la información del número mágico es utilizada por otros comandos como file para identificar el tipo de archivo y poder ofrecer información asociada a dicho tipo. Existe un fichero, el /usr/share/file/magic, que especifica qué números mágicos pueden ser chequeados, qué mensaje se visualizará en relación a cada número mágico e información adicional que se puede extraer del archivo.

Después del sha-bang aparece un nombre de camino. Se trata de la ubicación del programa que interpreta los comandos del script. Puede ser un shell del sistema, un intérprete de lenguaje o una utilidad. Por ejemplo, cabeceras válidas serían:

#!/bin/sh
#!/bin/bash
#!/usr/bin/perl
#!/usr/bin/tcl
#!/bin/sed -f
#!/usr/awk -f

Cada una de estas cabeceras invoca un intérprete de comandos diferente, siendo /bin/sh el shell por defecto (/bin/bash en el caso de sistemas Linux). Usando #!/bin/sh, el shell Bourne invocado por defecto en la mayoría de variantes de UNIX, hace que el script sea portable a máquinas no Linux, aunque podrían sacrificarse aspectos específicos de bash (el script deberá adaptarse a las especificaciones del estándar POSIX para poder ser realmente portable). El camino especificado junto con el sha-bang debe ser correcto, en otro caso, el resultado de la ejecución del script será "Comando no encontrado". La secuencia #! puede omitirse si el script consiste sólamente en un conjunto de comandos de sistema genéricos que no usen directivas internas del shell. Así, por ejemplo, basta que haya una asignación para que sea necesario su uso, ya que la asignación es una construcción específica del shell.

Esta es la primera vez que posteo algo referido al shell scripting pero no va a ser la última. En los próximos meses me veo obligado a lidiar con este tema, así que espero ofreceros mucha más información sobre estos tópicos. De momento, para entrar en calor os dejo un script básico comentado que pretende recordaros cómo se llevan a cabo la asignación, la visualización y las peculiaridades elementales del "quoting". Si queréis ejecutarlo en vuestro sistema Linux tecleadlo en cualquier editor de texto (yo he usado gedit que es para tontos, vi lo dejo para los que ya soys expertos) y guardadlo. Lo habitual es utilizar la extensión ".sh". Pongamos por caso que le llamamos "script1.sh". Después debéis darle permiso de ejecución: [prompt> chmod u+x script1.sh] y finalmente ejecutarlo [prompt> ./script1.sh] Por cierto, lo de dejar el código en forma de imagen ha sido intencionadamente, porque si os obligo a teclear el código vais a reparar más en los detalles y aprenderéis más. ¡Así que no seáis tramposos y no tiréis de OCR!. En fin, quizás os he dado ideas sin querer.

El resultado de la ejecución sería:


Referencias:

Las explicaciones y el código han sido extraídos, traducidos y adaptados de "Advanced Bash Shell Scripting Guide" de Mendel Cooper. Afortunadamente, cada vez disponemos de más bibliografía útil en español pero en muchas ocasiones agradeceríamos que alguien nos tradujese ciertas obras en inglés que por uno u otro motivo siguen siendo irreemplazables por más que haya otros enfoques en castellano. He aquí mi aportación en forma de pequeño grano de arena. Confío en que sepáis apreciar el esfuerzo que supone, porque grano a grano se construye el granero.

Para una primera toma de contacto sí hay material en español aceptable como "Introducción a la programación en Bash" de Gonzalo Rivero.

No hay comentarios: