Шаблоны Joomla 2.5 здесь: http://joomla25.ru/shablony/

Логические операторы И и Или в bash

оригинал статьи: https://sprosi.pro/questions/204/kak-opredelit-pusta-li-peremennaya-bash

Операторы && и || в 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 логически отрицает код возвращаемый программой.