Shell scripting: más ejemplos ilustrativos

En nuestro post anterior, presentamos los conceptos fundamentales de los scripts de la shell (tema conocido más comúnmente como shell scripting) y compartimos un ejemplo introductorio. En esta oportunidad utilizaremos otros comandos que hemos explicado en el blog para crear un script que nos resulte útil para automatizar una tarea. Al fin y al cabo, ese es uno de los propósitos fundamentales del shell scripting: liberar al administrador de tener que realizar una tarea repetitiva y a menudo tediosa. Luego, en los dos próximos posts, introduciremos los conceptos de condicionales y bucles a fin de lograr scripts más potentes.

Utilización de parámetros en shell scripting

A menudo querremos aplicar una acción a diferentes objetos, por lo que para evitar tener que modificar el script para cada caso en particular, podemos hacer uso de parámetros – o sea, valores que le pasamos al script al momento de ejecutarlo. Dentro del script, el primer parámetro se llama mediante $1, el segundo como $2, y así sucesivamente.

El siguiente script (backupbasico.sh) espera dos parámetros:

  1. Directorio a comprimir
  2. Nombre deseado para el tarball resultante

[pastacode lang=»bash» manual=»%23!%2Fbin%2Fbash%0A%0A%23%20El%20directorio%20a%20comprimir%20es%20el%20primer%20par%C3%A1metro%0ADIRECTORIO%3D%241%0A%0A%23%20Nombre%20del%20tarball%0AARCHIVO%3D%242%0A%0A%23%20Comprimir%20los%20contenidos%20de%20%24DIRECTORIO%0Atar%20czf%20%24ARCHIVO%20%24DIRECTORIO%2F*%0A%0A%23%20Mostrar%20mensaje%20por%20pantalla%0Aecho%20%22Se%20ha%20terminado%20de%20respaldar%20%24DIRECTORIO%20en%20%24ARCHIVO.%22″ message=»» highlight=»» provider=»manual»/]

Démosle permiso de ejecución al script:

[pastacode lang=»bash» manual=»chmod%20%2Bx%20backupbasico.sh» message=»» highlight=»» provider=»manual»/]

Y ejecutémoslo pasando /home/gacanepa y primerbackup.tar.gz como parámetros:

[pastacode lang=»bash» manual=».%2Fbackupbasico.sh%20%2Fhome%2Fgacanepa%20primerbackup.tar.gz» message=»» highlight=»» provider=»manual»/]

Luego podríamos reutilizar el script para respaldar los contenidos de /var/log/httpd en segundobackup.tar.gz:

[pastacode lang=»bash» manual=».%2Fbackupbasico.sh%20%2Fvar%2Flog%2Fhttpd%20segundobackup.tar.gz» message=»» highlight=»» provider=»manual»/]

En la Fig. 1 podemos ver los resultados:

Resultado de correr el script con diferentes parámetros
Figura 1 – Resultado de correr el script con diferentes parámetros

Finalmente, es importante saber cuándo un script ha finalizado correctamente. En algunos casos veremos un mensaje de error por la pantalla, y en otros no. Por ese motivo debemos recurrir a un método más confiable para determinar el estado de finalización (comúnmente llamado exit status) de un script. Para eso, Bash provee el recurso $?, el cual nos aporta este dato referido a la ejecución del último comando. Un exit status de 0 indica que el script o comando finalizó su ejecución correctamente. Mediante

[pastacode lang=»bash» manual=»echo%20%24%3F» message=»» highlight=»» provider=»manual»/]

podremos saber si la última ejecución del script fue exitosa. Si el resultado del comando anterior es 0, significa que así fue. De otra manera, deberemos analizar las posibles fallas. Para esto en el siguiente post hablaremos sobre condicionales. ¡Nos leemos en breve!