O problema aqui é que os backticks:
'command'
são usados para executar um comando e substituir seus fluxos de saída (padrão e erro) como resultado, e é por isso que o teste falha quando você fornece um arquivo sem permissões de execução.
Como corrigir isso
Use
if [ -f "$path" ]
As aspas duplas servem para proteger contra a divisão de palavras (no caso de conter espaços) e contra globbing (no caso de o caminho conter caracteres curinga como *
ou ?
)
Melhor ainda, como o caminho pode estar em um diretório, simplesmente verifique a existência do caminho com -e
:
if [ -e "$path" ]