Логические «И», «ИЛИ» и «НЕ»

Любая программа/команда по завершении возвращает так называемый код завершения. Если программа отработала без ошибок, то код завершения будет 0, если с ошибками, то 1. Эти коды 0 и 1 явно не видны, но мы всё равно можем ими пользоваться. В частности, можем использовать логические операторы И и ИЛИ.

Логическое И обозначается &&
Логическое ИЛИ обозначается ||

Предположим, нам нужно запустить программу и если она успешно завершится, выполнить ещё одну. Пример:

ls * && echo "Здесь есть файлы"

В этом примере мы выполняем команду ls * . Т.е. выводим список всех файлов в текущей директории, а в случае успеха (если файлы есть) командой echo выведем сообщение «Здесь есть файлы».

Теперь подробнее:
Если файлы есть, команда «ls *» отработает успешно и вернёт нам код завершения 0, а если файлов нет, то команда не сможет выполнить то, о чём мы её попросили и вернёт код завершения 1.
После этого начнёт выполнятся логический оператор && , который прочтёт код завершения. Если код завершения был 0, то оператор выполнит следующую команду (echo), а если код завершения был не 0, то следующую команду проигнорирует.

Подобным образом работает логический оператор «ИЛИ». Чуть поменяем предыдущий пример:

ls * || echo "Здесь нет файлов"

В этом примере мы выполняем команду ls * и в случае ошибки (если файлов не оказалось) командой echo выведем сообщение «Здесь нет файлов».

Командой wget скачайте файл: https://linux.cttit.ru/files/books/the_lion_the_witch_and_the_wardrob.txt . В случае, если файл скачан успешно выведете сообщение, «файл скачан».

Прочтите скачанный файл командой cat, в конвеере командой grep найдите слово «grass» и если слово найдено, выведите сообщение «Найдено слово grass»

Прочтите скачанный файл командой cat, в конвеере командой grep найдите вхождение «Barak Obama» и если вхождение не найдено, выведите сообщение «Не найдено»

Логическое отрицание, «НЕ»

Логическое отрицание, «НЕ», обозначается восклицательным знаком ! и используется для проверок в операторе test или if.
Например:

[[ -e file.txt ]] && echo "файл существует"
[[ ! -e file.txt ]] && echo "файл не существует"

В первом примере, мы проверили существует ли файл, а во втором мы сделали точно такую же проверку, но поставили логическое «НЕ», т.е. сделали проверку «если файл не существует».