К основному контенту

Операторы && и || в bash

Доброго времени суток, сегодня я расскажу вам о операторах && и || в 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 логически отрицает код возвращаемый программой.

Комментарии

Популярные сообщения из этого блога

Настройка VIM'а для разработки на C/C++

Наверняка вы уже слышали, что Vim - это мощнейший текстовый редактор не уступающий в функционале и удобстве большим тяжеловесным аналогам, наподобие Eclipse или XCode . Вот и я слышал, однако в базовой комплектации Vim умеет очень мало, подсвечивать синтаксис, расставлять отступы и подсказывать код на основе тэгов (но это не совсем то автодополнение которое мне бы нравилось). В этой статье я бы хотел рассказать, как Vim можно превратить в полноценную IDE для C/C++ с поддержкой проектов, автодополнения кода, поиском и подсвечиванием ошибок и генерацией по шаблонам. Предполагается, что у вас есть базовые умения в работе с Vim'ом.

Авторизация через ldap на Linux сервере

В системах с большим числом машин почти всегда встает вопрос централизованного управления пользователями и группами ( авторизации , аутентификации т.д.). Для этого удобно использовать LDAP. В этой статье я расскажу как настроить аутентификацию через LDAP и ограничить доступ к машине только для определенных групп.