Ho usato il seguente script per vedere se esiste un file:
#!/bin/bash
FILE=$1
if [ -f $FILE ]; then
echo "File $FILE exists."
else
echo "File $FILE does not exist."
fi
Qual è la sintassi corretta da usare se voglio controllare solo se il file non esiste?
#!/bin/bash
FILE=$1
if [ $FILE does not exist ]; then
echo "File $FILE does not exist."
fi
Il comando test ([
qui) ha un operatore logico "not" che è il punto esclamativo (simile a molte altre lingue). Provate questo:
if [ ! -f /tmp/foo.txt ]; then
echo "File not found!"
fi
Si può negare un'espressione con "!":
#!/bin/bash
FILE=$1
if [ ! -f "$FILE" ]
then
echo "File $FILE does not exist"
fi
La relativa pagina man è man test
o, equivalentemente, man [
-- o help test
o help [
per il comando built-in bash.
[[ -f $FILE ]] || printf '%s does not exist!\n' "$FILE"
Inoltre, è possibile che il file sia un link simbolico rotto, o un file non regolare, come ad esempio un socket, un dispositivo o un fifo. Ad esempio, per aggiungere un controllo per i link simbolici rotti:
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