domingo, 31 de mayo de 2009

Programación de scripts en Bash

Dentro de mis estudios esta la clase de programación de scripts que paso a resumir para quien tenga ganas o nostalgia y quieran desarrollar alguno.

Las bases del desarrollo de scripts en Bash, para poder crear nuestros propios programas de automatización.
Los scripts no son mas que archivos de texto interpretados. Por esta razón, vamos a iniciar un editor
de textos (nano, vi, emacs o el que más les guste) y crearemos un archivo llamado archivo.sh (la
extensión .sh nos servirá de ahora en más para identificar a todos los scripts hechos en BASH).
Una vez concluido el proceso de desarrollo de esta aplicación, vamos a ejecutarla para ver
que sucede:
./aplicación
A la hora de definir la ubicación de almacenamiento de los scripts, es conveniente seguir respetando
la estructura del sistema de archivos de Linux: aquellos scripts que solo deban ser utilizados por el
administrador, deben ser almacenados en el directorio /usr/sbin; mientras que el resto debe ser
almacenado en el directorio /usr/bin.
Lo primero que debemos aprender ahora es a manejar variables. Las variables nos sirven para
almacenar datos en la memoria (como números, nombres de archivos o lo que fuera) para luego
poder utilizarlo como dato en cualquier parte del programa. La definición de variables en el
lenguaje de script de Bash es igual que la definición de variables de entorno. Si queremos definir la
variable "edad" con el valor '24' solo hay que ingresar:
edad=24
Nótese que no se utilizan espacios entre el nombre de la variable y su correspondiente valor. Es muy
importante que respetemos esta propiedad, porque sino bash tomara cada cadena (edad, el símbolo
"=" y el valor) como un comando diferente.
Ahora, si queremos imprimir la variable en pantalla, utilizamos la misma función echo pero le
pasamos como parámetro el nombre de la variable precedido por un símbolo '$'.
echo $edad
También es posible incluir variables en medio de una cadena, se las llama de la misma manera. Por
ejemplo:
echo "La edad de este usuario es: $edad años"
De esta manera se imprimirán todos los caracteres encerrados entre comillas y, cuando llegue a
$edad se imprimirá el valor de esta variable. Desde ya que podemos utilizar las variables con
cualquier comando de Linux.
Salvo que hayan sido definidas con anterioridad a la ejecución del script, las variables existirán en
el sistema mientras el script esté en ejecución. Cuando el script finalice, las variables se borran.
Cuando ponemos el nombre de un comando entre comillas simples invertidas como valor de una
variable, lo que estamos haciendo es que bash ejecute ese comando y guarde la salida en la variable
definida. Luego, tal cual lo muestra el ejemplo, podemos imprimir esos datos con la función echo
que aprendimos anteriormente. ¡Jueguen con las variables y encontrarán nuevas funcionalidades!
Uno de los recursos muy utilizados en la programación de scripts en Bash es el pasaje de
parámetros desde la línea de comandos. Para esto, bash provee de una serie de nombres de variables
predefinidas. La variable '$0' almacena el nombre del script. Las variables siguientes ('$1', '$2', etc.)
guardan los diferentes parámetros
Como seguramente habrán adivinado, la variable '$*' guarda todos los argumentos concatenados.
Este método nos será útil para la creación de scripts con múltiples opciones, configuradas todas
desde la línea de comandos en el momento de ejecución.
Otras variables predefinidas con respecto a los parámetros Otras variables predefinidas son:
$#: Devuelve la cantidad de parámetros pasados a la función.
$?: Contiene el valor devuelto del ultimo programa ejecutado dentro del script.
Bien, es hora de que el usuario del programa ingrese algunos datos por medio del teclado. Este
proceso es muy sencillo: bash utiliza el comando read para el ingreso de datos en variables. Su
formato es:
read [variable] Cuando la interpretación del script llegue a este punto, esperara un ingreso de datos
proveniente del teclado y lo ira almacenando en la variable indicada.
Vamos a ver ahora algunas estructuras que nos permitirán controlar el flujo de nuestros programas.
Las estructuras condicionales son lo que hacen interesantes a los scripts. Utilizándolas, es posible
crear menús con opciones, tomar diferentes decisiones en base a una situación especifica, hacer
preguntas, y un sinfín de acciones mas. La mas famosa y utilizada de estas estructuras es el if
condicional. Su forma básica es la siguiente:
if [ expresión ]
then
accion1
elif [expresión ]
then
acción 2
else
accion3
fi
La primer línea evalúa la expresión entre corchetes. Si es verdadera ejecuta accion1, si es falsa,
salta la ejecución hasta el else y ejecuta accion2. Por ultimo, se cierra la estructura con un fi.
Recuerden siempre separar los corchetes de los valores de la expresión a evaluar (y de su operador).
Otra estructura condicional es el case. Su forma básica es la siguiente:
case [variable] in
opcion1)
funcion1 (...) ;;
opcion2)
funcion2 (...) ;;
opcion3)
funcion2 (...) ;;
*)
funcion4 (...) ;;
esac
La estructura case evalúa la variable [variable] con las distintas opciones definidas por el usuario. Si
se cumple alguna se ejecutan las funciones correspondientes a esta opción. Se puede también usar el
símbolo ‘|’ funciona como un ‘O’ con lo que ambas opciones pueden ser validas (no es necesario
utilizar la segunda opción). Cada opción finaliza con un doble símbolo ; (;;).
Si no se cumple ninguna de las opciones se ejecutara (siempre y cuando este definida), la opción
‘*’. Por ultimo, para cerrar la estructura se utiliza esac.
Ahora solo nos resta aprender a crear funciones repetitivas. Diremos que los
bucles repetitivos son estructuras que nos permiten repetir una acción muchas veces. Bash soporta
los bucles repetitivos while (repetición condicional) y for. El funcionamiento es el mismo que en los
otros lenguajes de script/programación La estructura del ciclo while es la siguiente:
while [condición]
do
accion1
(...)
done
Si la condición se cumple, while ejecuta accion1 y todas las operaciones siguientes hasta que la
condición sea falsa.
En conclusión…
Siendo administradores de sistemas, tener la posibilidad de desarrollar nuestros propios programas
en bash para automatizar tareas es una posibilidad realmente muy grande para optimizar nuestro
trabajo. Como siempre, la base de todo es la práctica, asi que los invito a desarrollar sus pequeños
programas.

No hay comentarios:

Publicar un comentario