Crear tus propios scripts usando bash
Con independencia de la distribución de Linux que estemos usando, ―qué duda cabe que mi preferida es Ubuntu― en cuanto nos adentramos en el uso de este sistema nos surgen determinadas necesidades de automatización. Es decir: crear nuestros comandos propios que realicen de forma personalizada determinados comandos. Esta necesidad puede obedecer a determinadas causas:
- Simplificar la sintaxis de los comandos que habitualmente ejecutamos.
- Efectuar acciones que cubran alguna necesidad que no esté prevista en el sistema operativo.
- Secuenciar ordenes que asiduamente repetimos.
Aunque un script bash puede ser ejecutado en/desde cualquier directorio, por lo general se crea un directorio para albergar estos scripts. En mi caso:
$ mkdir /home/pedro/.bin
Creo este directorio (oculto al llevar el punto delante del nombre) para albergar ahí todos los scripts que uso. Que el nombre del directorio está oculto no tiene otra significación que ―a no ser que se especifique explicitamente lo contrario― no aparecerá cuando visualice /home/pedro desde el visualizador de archivos en modo gráfico.
Ahora hay que informar a Linux que debe también buscar en ese lugar (/home/pedro/.bin) las órdenes que se ejecuten desde el terminal.
$ PATH=$PATH;/home/pedro/.bin
De esta forma el sistema buscará ahí nuestras órdenes hasta que cerremos la sesión. Para hacer esta asociación permanente:
$ sudo nano /etc/environment
y añadimos
:/home/pedro/.bin
al final de la línea PATH, es muy importante no olvidar los dos puntos antes de la dirección del directorio que estamos incluyendo, ya que este es el mecanismo de adición.
Nuestro primer Script paso a paso
Creamos nuestro archivo, así en mi caso:
$ touch ~/.bin/donde
Y para editarlo, se puede usar vuestro editor preferido o seguir esta indicación:
$ gedit ~/.bin/donde &
Y añadimos el siguiente contenido:
#!/usr/bin/env bash if [ $# -lt 1 ]; then echo "Necesitas pasar un parámetro" else whereis $1 fi
Análisis del script
Nuestra línea primera llamada «shebang» (#!/usr/bin/env bash) pide a Linux que informe dónde se encuentra el intérprete de comandos bash y que lo que viene a continuación sea ejecutado conforme a los requerimientos de bash. Esta precaución es conveniente para asegurarnos que nuestros scripts funcionan en cualquier instalación. Otra posible shebang sereía:
#!/bin/bash
La diferencia entre ellas puede llegar a ser muy friki, y paso a explicarla. En esta última asumo que en nuestro sistema el intérprete de comandos bash está en la dirección /bin/bash. Sin embargo, en la que propongo en el script supongo que no sé dónde está el intérprete bash. Le pido al sistema que él proporcione esa dirección.
Tercera línea: Como se puede apreciar la segunda linea se trata de un if. Para bash los carácteres “$#“ contienen el número de parámetros que estamos pasando desde la linea de comandos. Por tanto, ” if [ $# -lt 1 ];” literalmente significa “si el número de parámetros es menor que 1”.
Cuarta linea: Then (traduciendo literalmente del ingés: entonces), aquí se indica que lo que viene a continuación va a ser ejecutado cuando la evaluación de la condición if sea cierta: en otras palabras el número de parámetros sea menor 1, o sea, cero.
Quinta línea: Si ejecutamos nuestro script sin parámetro alguno mostramos en el terminal “Necesitas pasar un parámetro”.
Sexta línea: Indica que lo que viene a continuación va a ejecutarse cuando la condición que hemos declarado no sea cierta.
Séptima línea: Se ejecuta el comando “whereis“ acompañado del contenido que nosotros hemos pasado como primer parámetro.
Octava línea: con “fi” se indica que finaliza el bloque if.
Probando nuestro Script
Es importante añadir permisos de escritura al script:
$ chmod -x ~/.bin/donde
Sin ello nos aparecería un error de “permiso denegado”. Tras eso, podemos ejecutar nuestro script.
$ donde php
Debería mostrarnos la localización del los binarios de php, sus archivos fuente, y páginas de manual. Algo así:
php: /usr/bin/php7.0 /usr/bin/php /usr/lib/php /etc/php /usr/share/php7.0-readline /usr/share/php7.0-json /usr/share/php7.0-opcache /usr/share/php7.0-common /usr/share/php /usr/share/man/man1/php.1.gz
Recapitulando
- Habilitamos un directorio “.bin” para albergar nuestros scripts.
- Proporcionamos información a Linux para que incluya este directorio en sus búsquedas de comandos.
- Creamos nuestro script.
- Diferencia entre distintos shebang.
- Utilización del número de parámetros pasados con $#.
- Utilización del primer parámetro con $1.
Espero y deseo que este script sea de vuestra utilidad.
El artículo Crear tus propios scripts usando bash ha sido originalmente publicado en Ubunlog.