Доброго времени суток, сегодня я расскажу вам о операторах
&& и
|| в bash скриптинге. Итак все мы знаем что в Си эти операторы обозначают логическое
И и
Или. В bash в условиях оператора
if while или ещё каких либо они имеют точно такое же применение. А вот что делать если мы хотим запустить одну команду, а за ней другую?
Если команды независимые, то всё просто,
$ команда_один & команда_два
Такой подход (использование оператора
&) запустит обе эти команды одновременно. А что если необходимо запустить команды последовательно друг за другом? Например:
$ wget http://ilab.mipt.ru/melges/crypt.tar || echo "Download finish with error" >> /dev/tty2
Таким образом мы получим сообщение на второй консоли о ошибке при загрузке.
Другой вариант:
$ wget http://ilab.mipt.ru/melges/crypt.tar && echo "Download successfuly finished!" >> /dev/tty2
Так мы получим сообщение о успешной загрузке.
Такое поведение объясняется очень просто: интерпретируя
И нет смысла выполнять вторую команду, если первая вернула ошибку (То есть выполниться успешно должна
И первая
И вторая команда, если первая выполнена с ошибкой, то вторая
И первая выполниться успешно не могут). А интерпретируя
Или нет смысла выполнять вторую команду если первая выполнилась с успехом (То есть успешно должна выполниться
Или первая
Или вторая, если первая выполнилась успешно, то вторая
Или первая тоже будут успешными).
Конечный вариант:
$ (wget http://ilab.mipt.ru/melges/crypt.tar && echo "Download successfuly finished!" >> /dev/tty2) || echo "Download finish with error" >> /dev/tty2
По завершению работы команды получаем сообщение о результатах работы :)
Стоит добавить, что bash не отслеживает результат работы программ буквально, просто при успешном выполнении программа - возвращает ноль, а при неудачном число отличенное от нуля. Соответственно bash логически отрицает код возвращаемый программой.