while : ; do
    [[ -f "/path/to/file" ]] && break
    echo "Pausing until file exists."
    sleep 1
done
Без использования чего-то вроде inotify , это примерно предел того, что вы собираетесь делать.
Петля while выше просто : так как его условие , которое в значительной степени просто означает «сделать это , пока мы не убить его.»
Важная строка - это [[ test.  Условный тест здесь не использует оператор if .  Это потому, что [[ является действительной командой, а НЕ является частью оператора if .  Выполняется [[ -f "/path/to/file" ]] а && проверяет состояние выхода команды [[ и выполняет следующий оператор, если это состояние выхода равно 0 (успех).  Следующее утверждение здесь - это break который закроет текущий цикл, в котором находится ваш скрипт.
Примечание: в bash настоятельно рекомендуется использовать [[ вместо [ .  Он обладает всеми возможностями [ но гораздо более мощный и простой в использовании.