Bash es increíblemente flexible y ofrece varias opciones para probar archivos. Y si estás buscando una forma de probar tus archivos, los operadores de prueba de archivos en Bash te llevarán a lugares inimaginables.
En este tutorial, aprenderás diferentes operadores de prueba de archivos y cómo usarlos para verificar si un archivo existe, es legible, está vacío, y más.
Sigue leyendo y hazte amigo de los operadores de prueba de archivos en Bash.
Prerrequisitos
Este tutorial será una demostración práctica. Si quieres seguir, asegúrate de tener lo siguiente:
- A Linux system with Bash installed – This tutorial uses Ubuntu 20.04.
La mayoría de las distribuciones de Linux tienen Bash instalado por defecto. Pero si estás usando Windows, puedes instalar el Subsistema de Windows para Linux (WSL) para obtener un shell de Bash.
- A user account with sudo privileges to run commands as root – This tutorial uses a root account for simplicity. But using a non-root user with sudo access is always recommended.
- Este tutorial asume que tienes acceso SSH a tu sistema Linux.
¿Cuáles Son los Operadores de Prueba de Archivos Bash?
Antes de ensuciarte las manos con los operadores de prueba, echa un vistazo a cómo funcionan. Los operadores de prueba de archivos te permiten verificar varios aspectos de un archivo, como si existe un archivo, si es legible/escribible, etc.
El uso de operadores de prueba de archivos puede ayudar a prevenir errores en tus scripts de Bash. El código a continuación es una plantilla para la declaración if. La declaración if-else es una herramienta potente que verás a menudo en scripts de Bash.
Recuerda que las partes then y else del bloque de código son opcionales. Puedes usar una declaración if sin ellas.
Comprobando si un Archivo Existe
Has visto un vistazo de cómo funcionan los operadores de prueba, pero eso no es suficiente para entender mejor los entresijos de su uso. Así que comienza con un ejemplo básico, como verificar si un archivo existe.
En el mundo real, es posible que desees verificar si existe un archivo de configuración antes de crear uno. No quieres perder el tiempo construyendo un archivo de configuración desde cero solo para descubrir que ya existe uno igual.
Para verificar si un archivo ya existe:
1. Abre tu terminal y ejecuta el comando touch a continuación para crear un nuevo archivo test.txt. Este comando no proporciona salida, pero verificarás el archivo en el próximo paso.
2. A continuación, ejecuta el siguiente comando ls para listar el archivo recién creado (test.txt) en tu directorio de trabajo.
La salida a continuación verifica que has creado correctamente el archivo test.txt.
Ahora que tienes un archivo de prueba, puedes usar el bloque de código base en un script de Bash para verificar si el archivo existe en los siguientes pasos.

3. Ejecuta el siguiente comando para crear (touch) y abrir un nuevo archivo de script de shell (if_file_exists.sh) en tu editor de texto preferido (nano).
4. Ahora, coloca el código a continuación en tu nuevo archivo if_file_exists.sh, guarda el archivo y cierra el editor.
- Ejecuta una declaración if-else para probar si un archivo especificado existe.
- Si el operador devuelve true, recibirás un mensaje diciendo que el archivo existe.
- Si el operador devuelve true, recibirás un mensaje diciendo que el archivo no existe. Pero esta vez, el archivo se crea automáticamente, tomando el nombre que definiste en la variable FILE.
La línea #!/bin/bash en la parte superior del archivo se conoce como shebang. Un shebang le indica a tu sistema qué intérprete usar para ejecutar el script, en este caso, Bash. Si no incluyes un shebang, tu sistema usará el intérprete predeterminado, que podría no ser Bash. La ausencia de shebang puede hacer que tu script falle.
5. Ejecute el siguiente comando para ejecutar su nuevo script (if_file_exists.sh)
Si todo sale bien, verá el mensaje de que test.txt existe impreso en su terminal, como se muestra a continuación.

6. A continuación, ejecute los siguientes comandos para eliminar (rm -rf) el archivo de prueba (test.txt) y listar todos los archivos en su directorio de trabajo.
A continuación, puede verificar que el archivo test.txt ya no está en la lista.

7. Vuelva a ejecutar el siguiente comando para ejecutar su script if_file_exists.sh.
Dado que el archivo test.txt ya no existe, el script crea un nuevo archivo test.txt cuando el operador -e devuelve falso.

8. Finalmente, ejecute el comando ls a continuación para listar el archivo test.txt en su directorio de trabajo.
La salida a continuación confirma que su script ha creado un nuevo archivo test.txt.

Comprobación de si un archivo es un archivo regular o especial
Antes de abrir o procesar un archivo, es posible que desee verificar primero si ese archivo es regular o especial. ¿Por qué? Un archivo especial es un tipo de archivo almacenado en un sistema de archivos, así que tenga cuidado de no meterse con estos archivos.
Por ejemplo, un error común al abrir un archivo especial es el error “No such file or directory”. Este error ocurre cuando el archivo que intenta abrir no existe. Pero el mismo error también puede ocurrir al abrir un archivo especial en lugar de uno regular.
Abra un nuevo archivo special_file.sh en su editor de texto, agregue el siguiente código y guarde los cambios.
El código a continuación es similar al anterior. Pero este código utiliza el operador -f
en lugar del operador -e
. El operador -f
prueba si un archivo especificado (/dev/vmmon
) es un archivo regular.
Ahora, ejecuta el comando a continuación para ejecutar tu script special_file.sh
.
Dado que el archivo (/dev/vmmon) especificado en la variable FILE
es un archivo especial, obtendrás el siguiente mensaje.

Verificando si un Directorio Existe
Hasta ahora, has aprendido cómo verificar si un archivo existe. ¿Pero aplica el mismo método para directorios? Sí, utilizando el operador de prueba -d
. Este operador es útil si planeas tomar acciones en función de si un directorio existe o no.
Tal vez quieras copiar todos los archivos de un directorio a otro. Si el directorio de destino no existe, puedes crearlo antes de copiar los archivos.
1. Ejecute el comando ls a continuación para listar el ejemplo-dir desde el directorio de trabajo.
Obtendrá un mensaje que dice No existe el archivo o directorio ya que el directorio no existe. Si no desea que su flujo se interrumpa simplemente porque un directorio no existe, vaya al siguiente paso.

2. A continuación, abra un nuevo archivo llamado if_dir_exists.sh en su editor de texto, agregue el código a continuación y guarde el archivo. El siguiente código prueba si existe un directorio especificado y realiza tareas dependiendo de qué valor devuelva el operador -d.
Puede lograr el mismo resultado cambiando los if y else statements usando el operador de negación (!). En situaciones del mundo real, el operador ! puede ayudar a escribir un script más limpio y conciso.
3. Ahora, ejecute el comando a continuación para ejecutar su script (if_dir_exists.sh)
Puedes ver el mensaje que dice que el directorio ha sido creado y que el archivo test.txt ha sido copiado ya que el directorio example_dir no existe.

4. Finalmente, ejecuta el comando ls contra el directorio example_dir para confirmar que el directorio existe y contiene el archivo test.txt.

Comprobando Si un Archivo Está Vacío
Ya sabes cómo utilizar los tres operadores de prueba de archivo más utilizados (-e
, -f
y -d
) para mejorar tus habilidades de scripting. Pero aún hay otros operadores que te encantaría explorar.
Por lo general, en lugar de resaltar el contenido de un archivo para copiarlo a otro archivo, ejecutarías un comando para que haga el trabajo por ti. Pero espera un momento, ya que es posible que tu archivo de destino no esté vacío.
¿Por qué no usar el operador -s
para comprobar si un archivo existe y no está vacío? Este operador devuelve verdadero si el archivo existe y tiene un tamaño mayor que cero.
1. Abre un nuevo archivo llamado empty_file.sh en tu editor de texto, añade el siguiente código y guarda el archivo.
El siguiente código prueba si un archivo especificado está vacío e imprime un mensaje dependiendo del valor que devuelva el operador -s.
2. Ahora, ejecuta el siguiente comando para ejecutar tu script (empty_file.sh).
A continuación, puedes ver el mensaje que indica que test.txt no existe o está vacío. Pero al mismo tiempo, el script agrega texto al archivo test.txt.

3. Ejecuta el comando cat a continuación para verificar que el archivo test.txt contenga el texto agregado.

4. Finalmente, vuelve a ejecutar el siguiente comando bash para ejecutar el script empty_file.sh.
A continuación, puedes ver que la salida cambió a test.txt existe y no está vacío, ya que el archivo test.txt ahora contiene algún texto y tiene un tamaño mayor que cero (0).

Comprobando si un Archivo Existe y es Legible
Tal vez tu automatización involucre la lectura de archivos para realizar tareas. El éxito de esas tareas dependerá de si los archivos son legibles. Escribir un script para verificar si un archivo existe y es legible será útil como solución.
Para demostrar la comprobación de la existencia y legibilidad de un archivo:
1. Ejecute el siguiente comando para iniciar sesión en otra cuenta de usuario (ata).
Su indicador cambia ($) para indicar que ha iniciado sesión como el otro usuario.

Alternativamente, puede cambiar los permisos del archivo a legible, escribible o ambos con el comando chmod.
2. Una vez iniciada la sesión, cree un nuevo archivo llamado readable_file.sh con su editor de texto
Agregue el siguiente código al archivo readable_file.sh, y guarde los cambios. Este código verifica si existe y es legible un archivo llamado test.txt en el directorio /root.
3. Ahora, ejecute el siguiente comando para ejecutar el script readable_file.sh.
En esta ocasión, verás un mensaje que dice que /root/test.txt no existe o no se puede leer. Dado que el archivo text.test está ubicado en el directorio /root, el usuario actual (ata) no tiene permisos de lectura para el archivo text.txt.

4. Finalmente, ejecuta los siguientes comandos para realizar lo siguiente:
- Cambia el archivo sudoers para permitir que el usuario actual (ata) use
sudo
para ejecutar comandos elevados.
- Ejecuta el script readable_file.sh, que prueba si un archivo específico es legible.
Puedes ver a continuación que la salida imprime que test.txt existe y se puede leer porque el usuario ata ahora tiene permisos de lectura para el archivo test.txt.

Conclusión
A testing phase is always a priority before making drastic changes, whether on files or directories on your system. And in this tutorial, you’ve learned about the Bash file test operators and how to use them to test if a file (regular or special) or directory exists or if a file is readable or not.
Con estas habilidades recién adquiridas, puedes decidir con confianza qué acción tomar basándote en el resultado de las pruebas. Pero hay muchas otras formas en las que puedes utilizar los operadores de prueba de archivos Bash.
¿Por qué no intentar verificar la extensión de un archivo? ¿O tal vez verificar si existen varios archivos para asegurarte de que todos los archivos que necesitas estén disponibles?