Логические операторы И и Или в bash
- Подробности
- Категория: Linux - разное
- Опубликовано 11.08.2021 08:27
- Автор: Super User
- Просмотров: 588
оригинал статьи: https://sprosi.pro/questions/204/kak-opredelit-pusta-li-peremennaya-bash
Операторы && и || в bash
Доброго времени суток, сегодня я расскажу вам о операторах && и || в bash скриптинге. Итак все мы знаем что в Си эти операторы обозначают логическое И и Или. В bash в условиях оператора if while или ещё каких либо они имеют точно такое же применение. А вот что делать если мы хотим запустить одну команду, а за ней другую?
Если команды независимые, то всё просто,
Другой вариант:
Такое поведение объясняется очень просто: интерпретируя И нет смысла выполнять вторую команду, если первая вернула ошибку (То есть выполниться успешно должна И первая И вторая команда, если первая выполнена с ошибкой, то вторая И первая выполниться успешно не могут). А интерпретируя Или нет смысла выполнять вторую команду если первая выполнилась с успехом (То есть успешно должна выполниться Или первая Или вторая, если первая выполнилась успешно, то вторая Или первая тоже будут успешными).
Конечный вариант:
Стоит добавить, что bash не отслеживает результат работы программ буквально, просто при успешном выполнении программа - возвращает ноль, а при неудачном число отличенное от нуля. Соответственно bash логически отрицает код возвращаемый программой.
Если команды независимые, то всё просто,
$ команда_один & команда_дваТакой подход (использование оператора &) запустит обе эти команды одновременно. А что если необходимо запустить команды последовательно друг за другом? Например:
$ 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 логически отрицает код возвращаемый программой.