====== Bash : Les opérateurs de test sur les paramètres ======
* Objet : Suite de la série de wiki visant à maîtriser bash via les caractères.
* Niveau requis : {{tag>débutant}}
* Commentaires : Bash, ligne de commande et scripts
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
* Suivi : {{tag>en-chantier à-tester à-placer}}
* Création par [[user>agp91]] 20/02/2023
* Testé par <...> le <...> FIXME
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=393483#p393483 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
* [[doc:programmation:shells:bash-les-differents-caracteres-speciaux|Vision d'ensemble]]
* [[doc:programmation:shells:la-page-man-bash-les-caracteres-speciaux|Détail et caractères]]
* **Les opérateurs de test sur paramètres** ;-)
* [[doc:programmation:shells:la-page-man-bash-ii-les-operateurs-lexicographiques|Les opérateurs de test sur chaînes]]
* [[atelier:chantier:bash:les-operateurs-de-test-sur-fichiers|Les opérateurs de test sur fichiers]]
* [[doc:programmation:shells:page-man-bash-iii-les-operateurs-de-comparaison-numerique|Les opérateurs de comparaison numérique]]
* [[doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques|Les symboles dans les calculs]]
* [[doc:programmation:shells:page-man-bash-v-les-tableaux|Bash : les tableaux]]
* [[doc:programmation:shells:man-bash-vi-les-caracteres-de-transformation-de-parametres|Les caractères de transformation de parametres]]
* [[doc:programmation:shells:bash-vii-globs-etendus-regex|Bash : Variables, globs étendus, ERb, ERe]]
**Nota :**
Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !
===== Introduction =====
Dans la page du manuel de bash, **les opérateurs des commandes de test** sont nommées **primitives**.
Bash dispose de plusieurs commandes pour réaliser des tests sur des paramètres.
* Les commandes internes **[** et **test**.
* Et la commande composée **[[**.
* Les commandes **[** et **test** sont équivalentes.
* Les commandes **[** et **test** sont disponibles dans leurs versions externe : **/usr/bin/[** et **/usr/bin/test**.
* Elles ont toutes les deux la même page de manuel (**man [** ou **man test**).
* Les commandes internes disposent de primitive que n'ont pas les commandes externes.
__Rappels :__
* Une commande de test renvoie le code de retour 0 (considérer comme vrai) lorsque le test réussi et 1 (considérer comme faux) lorsqu'il échoue.
* Le code retour d'une commande est mémorisé dans le paramètre spécial $?.
* L'opérateur de contrôle **&&** exécute la commande suivante, si la commande précédente à renvoyée un code de retour égale à 0.
* L'opérateur de contrôle **||** exécute la commande suivante, si la commande précédente à renvoyée un code de retour supérieur à 0.
Les commandes de test disposent de deux primitives unaires pour tester les paramètres.
===== Synopsis =====
* **test OP nom_paramètre**\\
* **[ OP nom_paramètre ]**\\
* **[[ OP nom_paramètre ]]**
* Avec :
* **Nom_paramètre** est sujet au développement des paramètres.
* **OP**, l'un des opérateur du tableau suivant.
| Liste des primitives de test sur les paramètres ||
^ Primitives ^ Retours ^
|**-v** | Vrai si le paramètre existe. |
|**-R** | Vrai si le paramètre est une référence de nom.|
===== Exemples =====
Testons si la variable **var** existe.
var="Debian Facile" # var existe et n'est pas une chaîne vide.
[ -v var ] ; echo $?
var= # var existe et est une chaîne vide.
test -v var ; echo $?
unset var # Destruction de var (var n’existe plus).
[[ -v var ]] ; echo $?
0
0
1
Une __référence de nom__ est un paramètre qui mémorise le nom d'un autre paramètre.\\
Il est nécessaire d'utiliser la commande **declare -n** pour construire une référence de nom.
Testons si la variable **v** est une référence de nom.
var="Debian GNU Linux"
declare -n v=var
echo var=$var
echo v=$v
v="Debian Facile"
echo var=$var
[ -R var ] ; echo $?
[[ -R v ]] ; echo $?
declare -p var v
unset var v
var=Debian GNU Linux
v=Debian GNU Linux
var=Debian Facile
1
0
declare -- var="Debian Facile"
declare -n v="var"
===== Tuto précédent =====
[[doc:programmation:shells:la-page-man-bash-les-caracteres-speciaux|Détail et caractères]]
===== La suite c'est ici =====
[[doc:programmation:shells:la-page-man-bash-ii-les-operateurs-lexicographiques|Les opérateurs de test sur chaînes]]