Je parcourais un /etc/rc.d/init.d/sendmail
fichier (je sais que ce n'est presque jamais utilisé, mais j'étudie pour un examen) et je suis devenu un peu confus à propos &&
des ||
opérateurs et des opérateurs. J'ai lu où ils peuvent être utilisés dans des déclarations telles que:
if [ test1 ] && [ test2 ]; then
echo "both tests are true"
elif [ test1 ] || [ test2 ]; then
echo "one test is true"
fi
Cependant, ce script affiche des instructions d'une seule ligne telles que:
[ -z "$SMQUEUE" ] && SMQUEUE="QUEUE"
[ -f /usr/sbin/sendmail ] || exit 0
Ceux-ci semblent utiliser les opérateurs &&
et ||
pour obtenir des réponses sur la base de tests, mais je n'ai pas été en mesure de trouver de documentation sur l'utilisation particulière de ces opérateurs. Quelqu'un peut-il expliquer ce que cela fait dans ce contexte particulier?
la source
[ ... ]
comme un programme », dans de nombreux cas , il est . C'est généralement dans le fichier/bin/[
ou/usr/bin/[
.test
place deif
ou[
. Etif [
etif test
semblent être entrecoupés de[
ettest
sans rime apparente ni raison.test
se présente parfois, comme sur config.site pour les librairies du fournisseur sur Fedora x86_64 .Voici mon aide-mémoire:
la source
(a => b => a)
. "droite (aka false)":(a => b => b)
. "A; B" "alors"(a => b => (() => b())(a()))
. "A && B" "si sans autre (quand)"(a => b => a()(() => right)(b))
. "A || B" "sinon sans si (sauf)"(a => b => a()(b)(() => right))
. "a && b || c" "ifThenElse"(a => b => c => (unless(when(a)(b))(c))())
.développer sur la réponse de @ Shawn-j-Goff d'en haut,
&&
est un ET logique et||
un OU logique.Reportez - vous à cette partie du Advanced Bash Scripting Guide. Certains des contenus du lien pour la référence de l'utilisateur comme ci-dessous.
&& ET
|| OU
la source
D'après mon expérience, j'utilise les && et || pour réduire une instruction if à une seule ligne.
Supposons que nous recherchions un fichier appelé /root/Sample.txt, l'itération traditionnelle serait la suivante dans le shell:
Ces 6 lignes peuvent être réduites à une seule ligne:
Lorsque vous exécutez quelques itérations pour définir des variables ou pour créer des fichiers, etc., la vie est plus facile et le script a l'air plus lisse en utilisant une seule ligne si la fonction est utilisée, mais l'inconvénient est qu'il devient un peu plus difficile d'implémenter plusieurs commandes à partir d'une seule itération. vous pouvez utiliser des fonctions.
la source
./someScript.sh & && echo 'ok' || echo 'ko'
Il existe une notion de "coupe courte".
Quand
(expr1 && expr2)
est évalué -expr2
n'est évalué que s'il estexp1
évalué à "true". C'est parce queexpr1
ETexpr2
doivent être vrais pour(expr1 && expr2)
être vrais. Siexpr1
évalué à "false"expr2
n'est PAS évalué (raccourci) car(expr1 && expr2)
est déjà "flase".Essayez ce qui suit - supposez que le fichier
F1
existe et que le fichierF2
n'existe pas:De même pour
||
(ou) - mais la coupe courte est inversée.la source
Les exemples cités dans la réponse de Shawn J. Goff sont corrects, mais l'explication est l'inverse. Vérifiez s'il vous plaît:
la source
&&
résultats dans l'expression entière pour renvoyer false ?