Jak zjistím, že běžný soubor v Bashi neexistuje?

Použil jsem následující skript, abych zjistil, zda soubor existuje:

#!/bin/bash

FILE=$1     
if [ -f $FILE ]; then
   echo "File $FILE exists."
else
   echo "File $FILE does not exist."
fi

Jaká je správná syntaxe, pokud chci pouze zkontrolovat, zda soubor neexistuje?

#!/bin/bash

FILE=$1     
if [ $FILE does not exist ]; then
   echo "File $FILE does not exist."
fi
Řešení

Příkaz test ([ zde) má logický operátor "not", což je vykřičník (podobně jako v mnoha jiných jazycích). Vyzkoušejte tento příklad:

if [ ! -f /tmp/foo.txt ]; then
    echo "File not found!"
fi
Komentáře (11)

Výraz můžete negovat pomocí "!":

#!/bin/bash
FILE=$1

if [ ! -f "$FILE" ]
then
    echo "File $FILE does not exist"
fi

Příslušná manuálová stránka je man test nebo ekvivalentně man [ -- nebo help test nebo help [ pro vestavěný příkaz bash.

Komentáře (3)
[[ -f $FILE ]] || printf '%s does not exist!\n' "$FILE"

Je také možné, že soubor je nefunkční symbolický odkaz nebo neregulérní soubor, např. soket, zařízení nebo fifo. Chcete-li například přidat kontrolu nefunkčních symlinků:

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
Komentáře (7)