-L é o teste para o arquivo existente e também é um link simbólico
Se você não deseja testar se o arquivo é um link simbólico, mas apenas teste para ver se ele existe, independentemente do tipo (arquivo, diretório, soquete etc.) e use -e
Portanto, se o arquivo for realmente um arquivo e não apenas um link simbólico, você poderá executar todos esses testes e obter um status de saída cujo valor indique a condição de erro.
if [ ! \( -e "${file}" \) ]
then
echo "%ERROR: file ${file} does not exist!" >&2
exit 1
elif [ ! \( -f "${file}" \) ]
then
echo "%ERROR: ${file} is not a file!" >&2
exit 2
elif [ ! \( -r "${file}" \) ]
then
echo "%ERROR: file ${file} is not readable!" >&2
exit 3
elif [ ! \( -s "${file}" \) ]
then
echo "%ERROR: file ${file} is empty!" >&2
exit 4
fi