Programación Shell en Linux: Automatizar tareas

Programación Shell en Linux: Automatizar tareas

¿Qué es la programación shell?

Ya que hemos aprendido a utilizar algunos editores como vim y nano, podemos empezar a escribir algo de código para la shell.

La programación shell o shell scripting tiene como objetivo automatizar tareas repetitivas mediante la creación secuencias de código contenidos dentro de un programa llamado script.

Ejemplo de un script de shell

Vamos a crear un nuevo archivo llamado saludar.sh ya sea con vim o nano.

La primera línea del archivo contendrá la referencia al interprete de shell que será utilizado, en este caso /bin/bash, esta referencia es conocida como “shebang” que le indica al script que lenguaje es utilizado.

#!/bin/bash

Ahora vamos a crear un comentario, un comentario es una línea de código que es ignorada al momento de ejecutar el script, pero que permite documentar la finalidad de este.

#!/bin/bash
# Este programa saluda a la persona que lo utiliza

Podemos por ejemplo mostrar un saludo a la persona que esta usando el script.

#!/bin/bash
# Este programa saluda a la persona que lo utiliza
echo "Hola $LOGNAME que gusto verte"

¿Cómo asignar permisos de ejecución de un shell script?

Para ejecutar el script que acabamos de crear lo invocamos desde la terminal.

./saludar.sh
permission denied

La razón del porque no es posible ejecutar el script es debido a que en Linux existen 3 tipos de permisos de un archivo: escritura, lectura y ejecución. Para visualizar los permisos del script usamos ls.

ls -l saludar.sh
-rw-rw-r--

Los permisos se verán mas a detalle en capítulos posteriores, pero básicamente el último bloque de 3 permisos (permisos para el usuario) solo tiene habilitado la “r” que es el permiso de lectura (read). Para poder ejecutar un shell script necesitamos agregarle primero el permiso de ejecución, para ello usamos el comando chmod +x para habilitar su ejecución.

chmod +x saludar.sh

Y ahora podemos ejecutar el comando de 2 formas.

¿Cómo ejecutar el comando usando su path absoluto?

/home/luis/saludar.sh

o usamos el path relativo, en el caso que nuestro archivo este en el mismo directorio…

./saludar.sh

¿Cómo utilizar condicionales en la programación shell?

Los condicionales en programación proveen diferentes rutas posibles a la dirección de un programa. En el siguiente ejemplo vamos a comprobar si la el directorio actual en el que se encuentra el usuario $PWD es el directorio del home de este $HOME.

if [ "$PWD" == "$HOME" ]
then
  echo "Estas en el directorio home"
else
  echo "Estas en el directorio $PWD"
fi

Cuando ejecutamos el script dependiendo de si $PWD es igual a $HOME o no, se imprimirá el primer o segundo mensaje.

¿Cómo crear loops en la shell utilizando la sentencia for?

Podemos utilizar de forma sencilla el loop for para recorrer un listado de países

for pais in Italia Alemania Francia Holanda
do
  echo "$pais"
done

El resultado que tendríamos seria

Italia
Alemania
Francia
Holanda

También es posible recorrer rangos de números

for numero in {1..10}
do
 echo "$numero"
done

Nuestra salida sería la impresión de números del 1 al 10, uno en cada línea.