-L - это проверка на наличие файла, а также символическая ссылка
Если вы не хотите проверять, является ли файл символической ссылкой, а просто проверить, существует ли он независимо от типа (файл, каталог, сокет и т. Д.), Используйте -e
Таким образом, если файл действительно файл, а не просто символическая ссылка, вы можете выполнить все эти тесты и получить состояние выхода, значение которого указывает на состояние ошибки.
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