Shell scripts en Linux: introducción

En varios posts anteriores hemos explicado el uso de un sinfín de comandos (y también cómo buscar uno en particular de acuerdo a un resultado que estemos buscando), pero los hemos utilizado de manera aislada o a lo sumo conectados por tuberías. Una de las maneras de descubrir la potencia de la línea de comandos en Linux es mediante la creación de shell scripts, los cuales son archivos  ejecutables de texto plano que contienen comando tras comando en líneas sucesivas. Dichos comandos son interpretados por una shell, un programa que los toma como entrada y actúa como interfaz para que el kernel los ejecute.

Comenzando con shell scripts

La costumbre al presentar un nuevo lenguaje de programación es mostrar el clásico mensaje Hola mundo por pantalla. Tomemos un curso diferente para hacer algo un poco más interesante, útil, y que nos permita presentar conceptos básicos.

Haciendo uso de un editor de texto (como por ejemplo vim), escribamos lo siguiente dentro de primerscript.sh:

[pastacode lang=»bash» manual=»%23!%2Fbin%2Fbash%0A%0A%23%20La%20fecha%20actual%0AFECHA%3D%24(date%20%2B%25d%2F%25m%2F%25Y)%0A%0A%23%20Cantidad%20de%20sesiones%20abiertas%0ASESIONES%3D%24(who%20%7C%20wc%20-l)%0A%0A%23%20Mensaje%0Aecho%20%22Hoy%20es%20%24FECHA.%20Hay%20%24SESIONES%20sesiones%20abiertas%22″ message=»» highlight=»» provider=»manual»/]

Hagamos algunas aclaraciones:

  • La primera línea del script siempre debe indicar cuál es la shell con la que deseamos ejecutar el mismo. En la mayoría de las ocasiones elegiremos a Bash. La ruta absoluta a la shell debe ir precedida por los caracteres #!.
  • Salvo la primer línea del script, todas aquellas que comiencen con un signo numeral son comentarios informativos. Los usaremos para explicar el propósito de los comandos que siguen, con el propósito de aclarar el funcionamiento de nuestro script a otra persona que lo examine en el futuro (y para recordárnoslo a nosotros mismos también!). Estas líneas no son interpretadas por la shell durante la ejecución del script.
  • Para evitar tener que repetir un mismo comando en varias partes del script, y para facilitar su lectura también, a menudo querremos guardar el resultado en una variable. De esa manera, si deseamos cambiar el comando en el futuro, solamente tendremos que hacerlo en el lugar en donde declaramos la variable. En el ejemplo de arriba guardamos la salida de los comandos que indican la fecha actual y la cantidad de sesiones de usuario abiertas en las variables FECHA y SESIONES, respectivamente. Luego de indicar el nombre deseado para la variable, colocamos los signos =$ y encerramos el comando entre paréntesis.
  • Finalmente, el comando echo nos servirá para mostrar un mensaje por pantalla en el que mezclamos texto de nuestra elección con el contenido de las variables FECHA y SESIONES. Cuando deseamos utilizar en otra parte del script el valor guardado en una variable, lo hacemos anteponiendo el signo $ al nombre de la variable. A esta altura podemos darnos cuenta de que es mucho más amigable leer "Hoy es $FECHA" que "Hoy es $(date +%d/%m/%Y)".

Cerremos el archivo guardando los cambios y demos permisos de ejecución al archivo recién creado:

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

Y ejecutémoslo anteponiendo un punto y una barra al nombre del script (esto es necesario para indicar que primerscript.sh es un archivo ejecutable presente en el directorio actual, donde por lo general el sistema no espera encontrar archivos de ese tipo):

[pastacode lang=»bash» manual=».%2Fprimerscript.sh» message=»» highlight=»» provider=»manual»/]

El resultado puede verse en la Fig 1:

Resultado de la ejecución de nuestro primer script
Figura 1 – Resultado de la ejecución de nuestro primer script

¡Felicitaciones! Ya hemos dado nuestros primeros pasos en el fascinante mundo de los shell scripts. En el próximo post daremos más detalles para que podamos crear scripts útiles para nuestras necesidades como administradores. ¡Hasta entonces!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *