He utilizado el siguiente script para ver si existe un archivo:
#!/bin/bash
FILE=$1
if [ -f $FILE ]; then
echo "File $FILE exists."
else
echo "File $FILE does not exist."
fi
¿Cuál es la sintaxis correcta que debo utilizar si sólo quiero comprobar si el archivo no existe?
#!/bin/bash
FILE=$1
if [ $FILE does not exist ]; then
echo "File $FILE does not exist."
fi
El comando test ([
aquí) tiene un operador lógico "not" que es el signo de exclamación (similar a muchos otros lenguajes). Pruebe esto:
if [ ! -f /tmp/foo.txt ]; then
echo "File not found!"
fi
Puedes negar una expresión con "!":
#!/bin/bash
FILE=$1
if [ ! -f "$FILE" ]
then
echo "File $FILE does not exist"
fi
La página de manual relevante es man test
o, de forma equivalente, man [
-- o help test
o help [
para el comando incorporado de bash.
[[ -f $FILE ]] || printf '%s does not exist!\n' "$FILE"
Además, es posible que el archivo sea un enlace simbólico roto, o un archivo no regular, como por ejemplo un socket, dispositivo o fifo. Por ejemplo, para añadir una comprobación de enlaces simbólicos rotos:
if [[ ! -f $FILE ]]; then
if [[ -L $FILE ]]; then
printf '%s is a broken symlink!\n' "$FILE"
else
printf '%s does not exist!\n' "$FILE"
fi
fi