Я скользя через /etc/rc.d/init.d/sendmail
файл (я знаю , что это вряд ли когда - либо использовал, но я учусь на экзамен), и я стал немного запутался о &&
и на ||
операторах. Я читал, где они могут быть использованы в таких заявлениях, как:
if [ test1 ] && [ test2 ]; then
echo "both tests are true"
elif [ test1 ] || [ test2 ]; then
echo "one test is true"
fi
Однако этот скрипт показывает однострочные операторы, такие как:
[ -z "$SMQUEUE" ] && SMQUEUE="QUEUE"
[ -f /usr/sbin/sendmail ] || exit 0
Они , кажется, с использованием &&
и ||
операторов , чтобы получить ответы , основанные на тестах, но я не был в состоянии выкопать documenation относительно этого конкретного использования этих операторов. Кто-нибудь может объяснить, что они делают в этом конкретном контексте?
источник
[ ... ]
, что программа», во многих случаях это является . Обычно это в файле/bin/[
или/usr/bin/[
.test
вместоif
или[
. Аif [
и ,if test
кажется, с вкраплениями[
иtest
без видимой причины или рифмы.test
иногда появляется, как на config.site для библиотек поставщиков на Fedora x86_64 .Вот мой шпаргалка:
источник
(a => b => a)
. "правильно (иначе ложно)"(a => b => b)
. «А; Б» «тогда»(a => b => (() => b())(a()))
. «A && B» «если без других (когда)»(a => b => a()(() => right)(b))
. «A || B» «иначе без if (если)»(a => b => a()(b)(() => right))
. "a && b || c" "ifThenElse"(a => b => c => (unless(when(a)(b))(c))())
.чтобы расширить ответ @ Shawn-j-Goff сверху,
&&
это логическое И и||
логическое ИЛИ.Посмотрите эту часть Расширенного Руководства по написанию сценариев Bash. Некоторые из содержания по ссылке для справки пользователя, как показано ниже.
&& А ТАКЖЕ
|| ИЛИ ЖЕ
источник
По своему опыту я использую && и || сократить оператор if до одной строки.
Скажем, мы ищем файл с именем /root/Sample.txt, тогда традиционная итерация в оболочке будет выглядеть следующим образом:
Эти 6 строк могут быть сведены к одной строке:
При выполнении нескольких итераций для установки переменных или создания файлов и т. Д. Жизнь становится проще, и сценарий выглядит более гладким, если использовать функцию if в одной строке. Единственным недостатком является то, что становится несколько труднее реализовать несколько команд из одной итерации, однако Вы можете использовать функции.
источник
./someScript.sh & && echo 'ok' || echo 'ko'
Есть понятие «короткая стрижка».
Когда
(expr1 && expr2)
оценивается - оценивается,expr2
только еслиexp1
оценивается как «истина». Это потому, что обаexpr1
Иexpr2
должны быть правдой,(expr1 && expr2)
чтобы быть правдой. Еслиexpr1
значениеexpr2
равно «false», оно НЕ оценивается (сокращенный вариант), потому что(expr1 && expr2)
оно уже «flase».Попробуйте следующее - предположите, что файл
F1
существует, а файлF2
не существует:Аналогично для
||
(или) - но короткая резка меняется на противоположную.источник
Примеры в ответе Шона Дж. Гоффа верны, но объяснение наоборот. Пожалуйста, проверьте:
источник
&&
приводит ко всему выражению, возвращающему ложь ?