Przeglądałem /etc/rc.d/init.d/sendmail
plik (wiem, że rzadko się go używa, ale przygotowuję się do egzaminu) i trochę się zdezorientowałem co &&
do ||
operatorów. Przeczytałem, gdzie można ich używać w instrukcjach takich jak:
if [ test1 ] && [ test2 ]; then
echo "both tests are true"
elif [ test1 ] || [ test2 ]; then
echo "one test is true"
fi
Jednak ten skrypt wyświetla instrukcje jednowierszowe, takie jak:
[ -z "$SMQUEUE" ] && SMQUEUE="QUEUE"
[ -f /usr/sbin/sendmail ] || exit 0
Wydaje się, że używają one operatorów &&
i ||
do wywoływania odpowiedzi na podstawie testów, ale nie byłem w stanie wykopać dokumentacji dotyczącej tego konkretnego zastosowania tych operatorów. Czy ktoś może wyjaśnić, co robią w tym konkretnym kontekście?
źródło
[ ... ]
się za program”, ale w wielu przypadkach tak jest . Zazwyczaj jest w pliku/bin/[
lub/usr/bin/[
.test
zamiastif
lub[
. Aif [
iif test
wydają się być przeplatane[
itest
bez widocznego ładu i składu.test
pojawia się czasami, np. na config.site dla bibliotek dostawców na Fedorze x86_64 .Oto mój ściągawka:
źródło
(a => b => a)
. "prawo (aka false)":(a => b => b)
. „A; B” „następnie”(a => b => (() => b())(a()))
. „A && B” „jeśli bez innego (kiedy)”(a => b => a()(() => right)(b))
. „A || B” „inaczej bez if (chyba)”(a => b => a()(b)(() => right))
. „a&&b || c” „ifThenElse”(a => b => c => (unless(when(a)(b))(c))())
.rozwinięcie odpowiedzi @ Shawn-j-Goff z góry,
&&
jest logicznym AND i||
logicznym OR.Zobacz tę część Advanced Bash Scripting Guide. Niektóre treści z linku dla odniesienia użytkownika, jak poniżej.
&& I
|| LUB
źródło
Z mojego doświadczenia korzystam z && i || aby zredukować instrukcję if do jednego wiersza.
Załóżmy, że szukamy pliku o nazwie /root/Sample.txt, wówczas tradycyjna iteracja wyglądałaby następująco w powłoce:
Te 6 linii można zredukować do jednej linii:
Podczas uruchamiania kilku iteracji w celu ustawiania zmiennych lub tworzenia plików itp. Życie jest łatwiejsze, a skrypt wygląda na bardziej płynny przy użyciu pojedynczej linii, jeśli funkcja, jego jedyną wadą jest to, że trudniej jest zaimplementować wiele poleceń z jednej iteracji możesz skorzystać z funkcji.
źródło
./someScript.sh & && echo 'ok' || echo 'ko'
Istnieje pojęcie „skrótu”.
Kiedy
(expr1 && expr2)
jest oceniane -expr2
jest oceniane tylko wtedy, gdy zostanieexp1
ocenione na „prawda”. Jest tak, ponieważ obaexpr1
ORAZexpr2
muszą być prawdziwe,(expr1 && expr2)
aby były prawdziwe. Jeśliexpr1
wartość „false”expr2
NIE jest oceniana (skrót), ponieważ(expr1 && expr2)
jest już „flase”.Spróbuj wykonać następujące czynności - zakładając, że plik
F1
istnieje i plikF2
nie istnieje:Podobnie jest w przypadku
||
(lub) - ale skróty są odwrócone.źródło
Przykłady w odpowiedzi Shawna J. Goffa są poprawne, ale wyjaśnienie jest odwrotne. Proszę sprawdzić:
źródło
&&
powoduje, że całe wyrażenie zwraca false ?