Вы не должны дублировать проверяемую команду. Вы всегда можете написать:
while cmd; do ...; done
вместо
cmd
while [ $? = 0 ]; do ...; cmd; done
В вашем случае вы упоминаете в комментарии, что тестируемая вами команда анализирует вывод ps. Хотя есть очень веские аргументы, что вы не должны этого делать, и что последующая обработка должна выполняться родителем команды, которую вы ждете, в настоящий момент мы проигнорируем эту проблему. Вы можете просто написать:
while ps -ef | grep -v "grep mysqldump" |
grep mysqldump > /dev/null; do sleep 1200; done
Обратите внимание, что я изменил порядок вашей трубы, поскольку grep -v вернет true, если она
соответствует чему угодно. В этом случае, я думаю, что это не является необходимым, но я считаю, что больше
удобочитаемый. Я также отбросил вывод, чтобы немного почистить вещи.