Essencialmente, você está dizendo que, se uma tarefa falhar, as tarefas subseqüentes não devem ser executadas. Não há necessidade de quebrar, apenas torne as tarefas dependentes da conclusão bem-sucedida das tarefas anteriores:
while
performTask1 &&
performTask2 &&
...
performTaskX-1 &&
performTaskX
do :; done
Não há necessidade de colocar todas as tarefas em uma linha ... Essa forma não parece feia aos meus olhos.