martes, 19 de octubre de 2010

Programación de scripts (parte 1)

En un ambiente “NIX” se le llama intérprete de comandos al programa con el que regularmente llamamos a otros programas para que inicien. Este intérprete llamado “shell” es el equivalente a command.com de DOS y puede ser el Bourne Shell (sh), C-Shell (csh), Korn Shell y en sistemas modernos Borne Again Shell (bash).

Estos shell interpretan las órdenes que ingresamos por medio del teclado y nos permiten automatizar algunas tareas en la que se repiten las mismas órdenes en archivos que agrupan a éstas, estos archivos se les conoce como “scripts”.

En su forma más sencilla, un script simplemente agrupa una o mas instrucciones:

echo Hola, mundo

Para este ejemplo, vamos a crear un archivo llamado hola con el contenido anterior y lo ejecutamos de la siguiente forma:



$ sh hola
Hola, mundo


Cada shell tiene diferencias con respecto a los demás, principalmente entre sh y csh, el ksh y bash son derivados de sh, por lo que casi cualquier script escrito para este shell se puede ejecutar con los otros 2.


El sh es de todos estos el mas “viejo”, existe desde 1977 y su sintaxis es muy simple, en sistemas abiertos como Linux, en realidad el sh es una liga a otro shell, regularmente el bash.


El csh utiliza una sintaxis “inspirada” en el lenguaje C, al menos es lo que llevan años diciendo sus autores, su uso ya no es muy recomendado en la actualidad y las diferentes distros lo mantienen para mantener la compatibilidad, principalmente, de scripts ya muy viejos. Hay sistemas en los que el csh es sustituido por el más moderno tcsh.


El ksh está basado en sh, mantiene la misma sintaxis y tiene mejorías principalmente en lo que respecta a mantener un histórico de comando y la posibilidad de edición de las instrucciones.


El bash está desarrollado para mantener la compatibilidad con sh y su licencia es GNU, por lo que puede ser portado a cualquier "NIX”.


Regularmente la industria reconoce a ksh como el estándar y bash regularmente no tiene problemas para ejecutar scripts desarrollados para ksh por lo que es el que voy a utilizar para estos ejemplos.

#!/bin/ksh
#
# hola1
# Primera correccion al script hola
echo Hola $1!

En los scripts, los renglones que inician con el signo de número de consideran comentarios. Si el comentario inicia con #! el resto se considera el programa con el que se va a ejecutar el script, esta es una manera de “formalizar” al script indicando cual es el shell para el que fue desarrollado, además de que vamos a poder “forzar” su ejecución en el caso de que el usuario utilice otro shell, por estándar, el path completo del ksh es /bin/ksh. La cadena $1 representa a un parámetro que vamos a “pasar” en tiempo de ejecución. Vamos a “hacerlo” ejecutable y lo corremos de la siguiente forma:



$ chmod 755 hola1
$ ./hola1 Alejandro
Hola Alejandro!



Con el comando chmod activamos el “bit de ejecución” para todos, igual hubiera funcionado chmod +x hola1. Después de esto, lo ejecutamos con ./hola1, esto lo hice así debido a que, regularmente, el directorio actual no está incluido en el path de ejecución (variable PATH). Para los siguientes ejemplo voy a agregar el directorio al path de ejecución para evitar confusiones. Observen que después del nombre del script le dí un espacio y continuación escribí mi nombre, esta cadena es llamada parámetro.


Observen que ejecuta el echo dentro del script sustituyendo a $1 con la cadena “Alejandro”, en ksh, el signo $ al inicio de un identificador representa el valor de una variable de entorno, es decir, que al aparecer la cadena $var va a reemplazarla por el valor de la variable var. Esta variable debe estar definida previamente de la forma: var=valor, por ejemplo:



$ var1=Alejandro
$ var2=Jaramillo
$ echo $var1 $var2
Alejandro Jaramillo


Observen algo muy importante, para definir una variable no se utiliza el signo $.


Existen variables ya predefinidas, algunas son:



# Número de parámetros
1..9 Parámetro 1 al 9
? Valor devuelto por último comando ejecutado
PWD Directorio actual
PATH Path de búsqueda para ejecutables


En siguientes entradas continuaremos con este tema.

No hay comentarios.: