Интересно, что есть несколько ответов, объясняющих тонкие различия между [и [[, но по какой-то причине наша культура, кажется, препятствует людям предлагать очевидное решение. Прекратите использовать '[' полностью. Вместо '[' используйте test:
if test -f $DIR1/$FILE1 && test -f $DIR1/$FILE2; then
Тест - это более чистый синтаксис, чем '[', который требует заключительного аргумента ']' и постоянно вводит людей в заблуждение, что квадратные скобки являются частью языка. '[[' не является переносимым устройством и сбивает с толку людей, которые не понимают, что многие оболочки предоставляют дополнительную нестандартную функциональность. Можно привести аргумент, что [[может быть более эффективным, чем [, но если производительность оболочки является проблемой в вашей оболочке, вам, вероятно, не стоит решать проблему в sh.