-L es la prueba de archivo existente y también es un enlace simbólico
Si no desea probar que el archivo sea un enlace simbólico, solo pruebe para ver si existe independientemente del tipo (archivo, directorio, socket, etc.) y luego use -e
Entonces, si el archivo es realmente un archivo y no solo un enlace simbólico, puede hacer todas estas pruebas y obtener un estado de salida cuyo valor indica la condición de error.
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