Цикл 'then' используется для проверки условия, как вы упомянули, и будет запускать весь блок 'do | done', пока текущее условие не станет истинным. Другими словами, он выполняет блок кода только тогда, когда присутствует условие FALSE, и запускает его, пока он не станет истинным. Скрипт, который вы тестируете, полезен для перехвата зарегистрированного пользователя, который вы передаете скрипту в качестве параметра (следовательно, grep "$ 1", то есть $ 1, позиционный параметр). Он будет спать в течение минуты (сон 60), пока этот пользователь не войдет в систему, а затем выйдет из цикла и выполнит все действия «$ 1 только что вошел». Перенаправление вывода grep в / dev / null используется, чтобы не отображать вывод команды grep (вы могли бы использовать grep -q "$ 1", и это дало бы тот же эффект).
Надеюсь прояснить ваши сомнения.