I'usei o seguinte script para ver se um arquivo existe:
#!/bin/bash
FILE=$1
if [ -f $FILE ]; then
echo "File $FILE exists."
else
echo "File $FILE does not exist."
fi
Qual'é a sintaxe correcta a usar se eu quiser apenas verificar se o ficheiro **não*** existe?
#!/bin/bash
FILE=$1
if [ $FILE does not exist ]; then
echo "File $FILE does not exist."
fi
O comando test ([
aqui) tem um operador lógico "não" que é o ponto de exclamação (similar a muitos outros idiomas). Tente isto:
if [ ! -f /tmp/foo.txt ]; then
echo "File not found!"
fi
Podes negar uma expressão com "!":
#!/bin/bash
FILE=$1
if [ ! -f "$FILE" ]
then
echo "File $FILE does not exist"
fi
A página man relevante é man test
ou, equivalentemente, man [
-- ou help test
ou help [
para o comando bash embutido.
[[ -f $FILE ]] || printf '%s does not exist!\n' "$FILE"
Também é possível que o arquivo seja um link simbólico quebrado, ou um arquivo não-regular, como por exemplo, um soquete, dispositivo ou fifo. Por exemplo, para adicionar uma verificação de links simbólicos quebrados:
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