Ces opérateurs permettent d'exécuter ou non une commande en fonction du code de retour d'une autre commande.
| Opérateur | Signification | 
|---|---|
| && | ET logique | 
| || | OU logique | 
Ces opérateurs permettent d'exécuter ou non une commande en fonction du code de retour d'une autre commande.
| Opérateur | Signification | 
|---|---|
| && | ET logique | 
| || | OU logique | 
Syntaxe :
commande1 && commande2
La seconde commande (commande2) est exécutée uniquement si le code de retour de la commande (commande1) est égale à 0 (vrai).
Le code de retour global est égal à 0 (vrai) si le code de retour de chaque commande est égal à 0 (vrai).
Exemple :
Le répertoire temp/temp2 n'existe pas donc la commande cd n'est pas exécutée
$ ls -d temp/temp2
	ls: impossible d'accéder à temp/temp2: Aucun fichier ou dossier de ce type
	$ pwd
	/home/toto
	$ [[ -d temp/temp2 ]] && cd temp/temp2
	$ echo $?                     # code de retour de la commande [[ ]]
	1
	$ pwd
	/home/toto
	$
Le répertoire temp/temp2 existe donc la commande cd est exécutée
$ mkdir temp/temp2
	$ pwd
	/home/toto
	$ [[ -d temp/temp2 ]] && cd temp/temp2
	$ echo $?                     # code de retour de la commande globale
	0
	$ pwd
	/home/toto/temp/temp2
	$
Le répertoire temp/temp2 existe mais le répertoire temp/temp3 n'existe pas donc la commande cd retourne un code erreur égal à 1
$ [[ -d temp/temp2 ]] && cd temp/temp3
	-bash: cd: temp/temp3: Aucun fichier ou dossier de ce type
	$ echo $?                     # code de retour de la commande cd
	1
	$
Ces actions peuvent également être exécutées avec la structure de commande if
$ pwd
	/home/toto
	$ ls -d temp/temp2
	temp/temp2
	$ if [[ -d temp/temp2 ]]
	> then
	> cd temp/temp2
	> fi
	$ echo $?
	0
	$ pwd
	/home/toto/temp/temp2
	$
Syntaxe :
commande1 || commande2
La seconde commande (commande2) est exécutée uniquement si le code de retour de la commande (commande1) est égale à 1 (faux).
Le code de retour global est égal à 0 (vrai) si au moins une des commandes retourne un code égal à 0 (vrai).
Exemple :
Le répertoire temp/temp2 n'existe pas donc la commande echo est exécutée
$ ls -d temp/temp2
	ls: impossible d'accéder à temp/temp2: Aucun fichier ou dossier de ce type
	$ [[ -d temp/temp2 ]] || echo "Le répertoire n'existe pas"
	Le répertoire n'existe pas
	$ echo $?
	0
	$
Le répertoire temp/temp2 existe donc la commande echo n'est pas exécutée
$ mkdir temp/temp2
	$ ls -d temp/temp2
	temp/temp2
	$ [[ -d temp/temp2 ]] || echo "Le répertoire n'existe pas"
	$ echo $?
	0
	$
Ces actions peuvent également être exécutées avec la structure de commande if
$ ls -d temp/temp2
	ls: impossible d'accéder à temp/temp2: Aucun fichier ou dossier de ce type
	$ if [[ ! -d temp/temp2 ]]
	> then
	> echo "Le répertoire n'existe pas"
	> fi
	Le répertoire n'existe pas
	$
Ne pas confondre les opérateurs du shell && et || qui effectuent une opération logique entre deux commandes et les opérateurs && et || de la commande [[ ]] qui sont internes à celle-ci