Ich habe eine /etc/rc.d/init.d/sendmail
Datei durchgesehen (ich weiß, dass dies kaum verwendet wird, aber ich lerne für eine Prüfung) und bin ein bisschen verwirrt über die &&
und die ||
Operatoren. Ich habe gelesen, wo sie in Aussagen wie verwendet werden können:
if [ test1 ] && [ test2 ]; then
echo "both tests are true"
elif [ test1 ] || [ test2 ]; then
echo "one test is true"
fi
Dieses Skript zeigt jedoch einzeilige Anweisungen wie:
[ -z "$SMQUEUE" ] && SMQUEUE="QUEUE"
[ -f /usr/sbin/sendmail ] || exit 0
Diese scheinen die Operatoren &&
und ||
zu verwenden, um auf der Grundlage von Tests Antworten auszulösen, aber ich konnte keine Dokumentation zu dieser speziellen Verwendung dieser Operatoren finden. Kann jemand erklären, was diese in diesem speziellen Kontext tun?
quelle
[ ... ]
ein Programm zu sein“, in vielen Fällen ist es ist . Es ist häufig in der Datei/bin/[
oder/usr/bin/[
.test
anstelle vonif
oder[
. Undif [
undif test
scheinen mit[
undtest
ohne ersichtlichen Reim oder Grund durchsetzt zu sein.test
taucht gelegentlich auf, wie auf config.site für Vendor Libs auf Fedora x86_64 .Hier ist mein Spickzettel:
quelle
(a => b => a)
. "Recht (aka false)":(a => b => b)
. "A; B" "dann"(a => b => (() => b())(a()))
. "A && B" "wenn ohne sonst (wann)"(a => b => a()(() => right)(b))
. "A || B" "sonst ohne wenn (außer)"(a => b => a()(b)(() => right))
. msgstr "a & b || c" "ifThenElse"(a => b => c => (unless(when(a)(b))(c))())
.Die Antwort von @ Shawn-j-Goff von oben zu erweitern,
&&
ist ein logisches UND und||
ein logisches ODER.Siehe diesen Teil des Advanced Bash Scripting Guide. Einige der Inhalte aus dem Link als Benutzerreferenz wie unten.
&& UND
|| ODER
quelle
Aus meiner Erfahrung benutze ich die && und || Reduzieren einer if-Anweisung auf eine einzelne Zeile.
Angenommen, wir suchen nach einer Datei mit dem Namen /root/Sample.txt, dann würde die herkömmliche Iteration in der Shell wie folgt lauten:
Diese 6 Zeilen können auf eine einzelne Zeile reduziert werden:
Wenn Sie ein paar Iterationen ausführen, um Variablen zu setzen oder Dateien usw. zu erstellen, ist das Leben einfacher und das Skript sieht mit der Funktion if in einer Zeile glatter aus. Der einzige Nachteil ist, dass es etwas schwieriger wird, mehrere Befehle mit einer einzelnen Iteration zu implementieren Sie können Funktionen nutzen.
quelle
./someScript.sh & && echo 'ok' || echo 'ko'
Es gibt den Begriff "Abkürzung".
Wann
(expr1 && expr2)
wird ausgewertet -expr2
wird nur ausgewertet, wenn dieexp1
Bewertung "wahr" ist. Dies liegt daran, dass beideexpr1
UNDexpr2
wahr sein müssen, um wahr(expr1 && expr2)
zu sein. Wennexpr1
"false" ausgewertet wird,expr2
wird NICHT ausgewertet (Abkürzung), da(expr1 && expr2)
"flase" bereits vorhanden ist.Versuchen Sie Folgendes - nehmen Sie an, dass die Datei
F1
existiert undF2
nicht existiert:Ähnliches gilt für
||
(oder) - aber das Kurzschneiden wird umgekehrt.quelle
Die Beispiele in der Antwort von Shawn J. Goff sind richtig, aber die Erklärung ist umgekehrt. Bitte prüfe:
quelle
&&
Ergebnisses im gesamten Ausdruck false zurückgibt ?