${var:?erro}
Sem valor, o script para na hora — com a mensagem escolhida.
A sentinela da família: se var estiver vazia ou ausente, o shell escreve a mensagem no erro padrão e, em script, encerra ali mesmo. Nenhum rm -r parte com destino vazio.
É a checagem de pré-condição mais barata que existe: uma linha, nenhum if. No shell interativo o comando é abortado, mas a sessão sobrevive.
$ unset DESTINO
$ cp coleta.db "${DESTINO:?defina DESTINO antes}"
bash: DESTINO: defina DESTINO antes
$ echo $?
1