Introducción
Muchas veces, al escribir scripts de Shell, puede encontrarse en una situación en la que necesite realizar una acción en función de si existe o no un archivo.
En Bash, puede usar el comando de prueba para verificar la existencia de un archivo y determinar el tipo de archivo.
El comando de prueba utiliza una de las siguientes formas de sintaxis:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
Si desea que su script sea portátil, debería preferir usar el antiguo [
test que está disponible en todos los shells POSIX. La nueva versión actualizada del [[
(doble paréntesis) es compatible con la mayoría de los sistemas modernos que utilizan Bash, Zsh y Ksh como shell predeterminado.
Compruebe si el archivo existe
Al comprobar si existe un archivo, los operadores FILE más utilizados son -e
y -f
. El primero verificará si existe un archivo independientemente de su tipo, mientras que el segundo solo devolverá verdadero si el ARCHIVO es un archivo normal (no un directorio o dispositivo).
La opción más legible al comprobar si existe o no un archivo es utilizar el comando de prueba en combinación con la instrucción if. Los siguientes scripts comprobarán si existe el archivo /etc/resolv.conf
FILE=/etc/resolv.conf
if test -f "$FILE"; then
echo "$FILE exist"
fi
FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
echo "$FILE exist"
fi
FILE=/etc/resolv.conf
if [[ -f "$FILE" ]]; then
echo "$FILE exist"
fi
Si desea realizar una acción diferente en función de si el archivo existe o no, simplemente use la construcción if /then:
FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
echo "$FILE exist"
else
echo "$FILE does not exist"
fi
Utilice siempre comillas dobles para evitar problemas al trabajar con archivos que contengan espacios en blanco en sus nombres.
También puede usar el comando de prueba sin la instrucción if. El comando después del &&
se ejecutará solo si el estado de salida del comando de prueba es verdadero,
test -f /etc/resolv.conf && echo "$FILE exist"
[ -f /etc/resolv.conf ] && echo "$FILE exist"
[[ -f /etc/resolv.conf ]] && echo "$FILE exist"
Si desea ejecutar una serie de comandos después de que el &&
simplemente encierre los comandos entre llaves separadas por ;
o &&
:
[ -f /etc/resolv.conf ] && { echo "$FILE exist"; cp "$FILE" /tmp/; }
Después de &&
, la declaración que sigue al