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