Как запустить команду только после того, как предыдущая команда не удалась в bash?

Мы используем оператор && для запуска команды после завершения предыдущей.

update-system-configuration && restart-service 

но как выполнить команду только в том случае, если предыдущая команда не увенчалась успехом? Например, если мне нужно обновить конфигурацию системы, и если она не удалась, мне нужно отправить почту администратору системы?

Редактировать: Давай, это не дублирующий вопрос о операторах управления. Это поможет пользователям, которые ищут именно это, я понимаю, что ответ на контрольные операторы также ответит на этот вопрос, но люди, которые ищут конкретно способы обработки неуспешных команд, не дойдут туда напрямую, иначе я бы добрался туда, прежде чем задавать этот вопрос вопрос.

  • Сокращение порядка и вывод текста
  • Переменные баша в команде
  • эхо-имена и количество строк для каждого файла в каталоге
  • Как удалить папки, созданные с именами дат 2016-04-03 до 2016-10-4
  • Как автоматически определять и записывать в usb с переменными пространствами в его имени
  • Отображение командной строки (PS1) для набора каталогов
  • Сценарий Bash не заменяет переменную как ожидалось
  • Как искать определенные разделы файла, а затем извлекать только соответствующую информацию в этом разделе?
  • 2 Solutions collect form web for “Как запустить команду только после того, как предыдущая команда не удалась в bash?”

    && выполняет команду, которая выполняется только в том случае, если команда, которая предшествует ей, выполняется успешно. || делает обратное:

     update-system-configuration || echo "Update failed" | mail -s "Help Me" admin@host 

    Документация

    От man bash :

    И и OR – это последовательности одного из нескольких конвейеров, разделенных символами && и || соответственно. Списки AND и OR выполняются с левой ассоциативностью. Список AND имеет форму

     command1 && command2 

    command2 выполняется, если и только в том случае, если command1 возвращает статус выхода из нуля.

    Список OR имеет форму

     command1 || command2 

    command2 выполняется тогда и только тогда, когда command1 возвращает ненулевой статус выхода. Возвращаемым статусом списков AND и OR является статус выхода последней команды, выполненной в списке.

    Когда с «успешным» вы подразумеваете, что он возвращает 0 , просто попробуйте:

     if ! <command>; then <ran if unsuccessful> fi 

    Причина, по которой это работает, заключается в том, что в качестве стандарта программы должны возвращать ненулевое значение, если что-то пошло не так, и нуль в случае успеха.

    Кроме того, вы можете проверить возвращаемую переменную $? :

     <command> if [ $? -ne 0 ]; then <ran if unsuccessful> fi 

    $? сохраняет код возврата из последней команды.

    Теперь, if обычно это встроенная команда оболочки. Итак, в зависимости от того, какую оболочку вы используете, вы должны проверить man-страницу своей оболочки.

    Linux и Unix - лучшая ОС в мире.