Expresiones test en scripts de Bash

Al desarrollar scripts en Bash, a menudo necesitaremos evaluar condiciones. Los casos más comunes son la existencia de un archivo, el tipo del mismo (archivo regular, directorio, enlace simbólico, etc), y sus permisos. En este post explicaremos cómo efectuar esas verificaciones utilizando expresiones test. Además, mostraremos cómo realizar operaciones lógicas del tipo AND y OR entre dos condiciones. ¡Comencemos!

Expresiones test

Para empezar, es importante recordar la estructura de un condicional en un script. Luego de haberlo hecho, podemos presentar las siguientes expresiones test para nuestro uso. Todas se refieren al archivo prueba1 que debemos haber creado dentro del mismo directorio donde colocaremos el script.

  • [ -f prueba1 ] se utiliza para chequear que prueba1 exista y que sea un archivo regular.
  • [ -e prueba1 ] o [ -a prueba1 ] verifican que prueba1 exista. Sin embargo, en este caso la condición se cumplirá incluso cuando se trate de un directorio, enlace simbólico, u otro tipo de archivo.
  • [ -s prueba1 ] será verdadero si prueba1 existe y su tamaño es mayor que 0 bytes.
  • [ -O prueba1 ] se utiliza para verificar que el usuario actual sea dueño del archivo.

Finalmente,

  • [ -r prueba1 ], [ -w prueba1], y [ -x prueba1 ] nos ayudarán a determinar si tenemos permisos de lectura, escritura, y ejecución sobre prueba1.

Para ver el listado completo de expresiones test, podemos referirnos a la documentación disponible en The Linux Documentation Project.

Ejemplos

En la Fig. 1 podemos ver que prueba1 es un archivo de texto plano cuyo tamaño es 23 bytes:

Antes de utilizar las expresiones test, verificamos el tipo de archivo, el tamaño, y los permisos de prueba1
Figura 1 – Antes de utilizar las expresiones test, verificamos el tipo de archivo, el tamaño, y los permisos de prueba1

A continuación crearemos el script test.sh con los siguientes contenidos (¡no nos olvidemos de hacerlo ejecutable también!):

#!/bin/bash

ARCHIVO=prueba1

# Verificación de condiciones
if [ -f $ARCHIVO -a -s $ARCHIVO ] ; then echo "$ARCHIVO existe, es un archivo regular, y su tamaño es mayor a 0 bytes."; fi
if [ -r $ARCHIVO -a -w $ARCHIVO ] ; then echo "$ARCHIVO existe y tengo permisos de lectura y escritura."; fi
if [ ! -x $ARCHIVO -o ! -O $ARCHIVO ]; then echo "No soy el dueño de $ARCHIVO o no tengo permisos de ejecución."; fi

Veamos en la Fig. 2 qué sucede cuando ejecutamos el script una primera vez. Luego cambiamos algunas de las condiciones y verifiquemos nuevamente:

Resultado de expresiones test dentro de un script
Figura 2 – Resultado de expresiones test dentro de un script

Podemos ver que:

  • Luego de vaciar el archivo prueba1, la primera condición no se cumple más.
  • Lo mismo sucede con la tercera condición luego de otorgarle permisos de ejecución al dueño del archivo.
  • Las operaciones lógicas AND y OR se implementan a través de -a y -o, respectivamente. Es posible utilizar un NOT al colocar el signo de exclamación ! delante de la condición que deseemos negar.
  • Espero que este post les haya resultado útil. ¡Nos leemos en breve!

¡Aprovechá la oportunidad de suscribirte al blog para recibir en tu correo el post nuestro de cada día, novedades, y promociones exclusivas!