logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
doc:programmation:shells:la-page-man-bash-ii-les-operateurs-lexicographiques [21/02/2023 00:26]
agp91 [Opérateurs sur les chaînes]
doc:programmation:shells:la-page-man-bash-ii-les-operateurs-lexicographiques [30/04/2023 01:23] (Version actuelle)
arpinux lien mort : page utilisateur absente
Ligne 9: Ligne 9:
     * Création par [[user>​Hypathie]] le 08/04/2014     * Création par [[user>​Hypathie]] le 08/04/2014
     * Testé par [[user>​Hypathie]] en Avril 2014     * Testé par [[user>​Hypathie]] en Avril 2014
-    * Modifié par [[user|agp91]] le 21/02/2022+    * Modifié par **agp91** le 21/02/2022
  
   * Commentaires sur le forum : [[https://​debian-facile.org/​viewtopic.php?​pid=140699#​p140699 | Lien vers le forum concernant ce tuto]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))    * Commentaires sur le forum : [[https://​debian-facile.org/​viewtopic.php?​pid=140699#​p140699 | Lien vers le forum concernant ce tuto]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) 
Ligne 25: Ligne 25:
  
 ===== Introduction ===== ===== Introduction =====
- 
  
 <​note>​ <​note>​
-Dans la page du manuel de bash, **les opérateurs des commandes de test** sont nommées ​__**primitives**__.+Dans la page du manuel de bash, **les opérateurs des commandes de test** sont nommés ​__**primitives**__.
 </​note>​ </​note>​
  
-Bash dispose de plusieurs commandes pour **réaliser des tests sur des chaînes de carractères**.+Bash dispose de plusieurs commandes pour **réaliser des tests sur des chaînes de caractères**.
  
   * Les commandes internes **[** et **test**.   * Les commandes internes **[** et **test**.
Ligne 39: Ligne 38:
   * Les commandes **[** et **test** sont disponibles dans leurs versions externe : **/​usr/​bin/​[** et **/​usr/​bin/​test**.   * 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**).     * 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.+  * Les commandes internes disposent de primitives ​que n'ont pas les commandes externes.
 </​note>​ </​note>​
  
Ligne 45: Ligne 44:
 __Rappels :__ __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.+  *  Une commande de test renvoie le code de retour 0 (considéré ​comme vrai) lorsque le test réussi et 1 (considéreé ​comme faux) lorsqu'​il échoue.
   *  Le code retour d'une commande est mémorisé dans le paramètre spécial $?.   *  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 é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.   *  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.
 </​note>​ </​note>​
 +
 +===== Tester une chaîne (vide ou pas) =====
 +
 +Les commandes de test disposent de deux opérateurs unaires pour tester si une chaîne est vide (de longueur nulle) ou pas.
 +
 +==== Syntaxe ====
 +
 +  * **test OP** [**"​**]**chaîne**[**"​**]
 +  * **[ OP** [**"​**]**chaîne**[**"​**] **]**
 +  * **<​nowiki>​[[</​nowiki>​ OP** [**"​**]**chaîne**[**"​**] **<​nowiki>​]]</​nowiki>​**
 +
 +  * Avec :
 +    * **Chaîne** est sujette au développement des paramètres.
 +    * **OP**, l'une des primitives du tableau suivant.
 +
 +|  Liste des primitives de test sur chaîne ​ ||
 +^ Primitives ^ Retours ^
 +|''​-z''​ | Vrai si chaîne de longueur nulle |
 +|''​-n''​ | Vrai si chaîne de longueur non nulle |
 +
 +<​note>​
 +  * Si l'​opérande (**chaîne**) contient des espaces, il doit être protégé.
 +  * La primitive **-n** peut-être omis.
 +</​note>​
 +
 +==== Exemples ====
 +
 +<code user>
 +test -z ; echo $? #Test si vide et affiche le code retour
 +[ -n ""​ ] ; echo $? #Test si non vide et affiche le code retour
 +[[ ""​ ]] ; echo $? #Test si non vide et affiche le code retour
 +</​code><​file>​
 +0
 +1
 +1
 +</​file>​
 +
 +<code user>
 +test -z "​mot"​ ;​ echo $?
 +[[ -n "​Linux"​ ]] ; echo $?
 +[[ "GNU Linux" ]] ; echo $?
 +</​code><​file>​
 +1
 +0
 +0
 +</​file>​
 +
 +<code user>
 +v="​Debian GNU Linux"
 +test -z "​$v"​ ;​ echo $?
 +
 +v=""​
 +[ -n "​$v"​ ] ; echo $?
 +
 +unset v # Supprime le paramètre v
 +[[ -z "​$v"​ ]] ; echo $?
 +[ "​$v"​ ] ; echo $?
 +
 +</​code><​file>​
 +1
 +0
 +0
 +1
 +</​file>​
 +
 +==== Mauvais usages ====
 +
 +Les directives **-z** et **-n** sont des directives unaires, elles n'​acceptent qu'un seul opérande (argument).\\ ​
 +Si sa valeur contient des espaces, il doit être protégé par des guillemets simple ou doubles.\\
 +__Rappel__ : Les guillemets simple ne permettent le remplacement des paramètres.
 +
 +<code user>
 +p="​Debian Facile"​
 +test -z $p ; echo $?
 +
 +unset p
 +</​code><​file>​
 +bash: test: Debian : opérateur binaire attendu
 +2
 +</​file>​
 +<​note>​
 +Lorsqu'​une commande interne renvoie un **code de retour 2**, cela signifie un mauvais usage de cette commande.
 +</​note>​
 +
 +La directive **-n** revoie un code de retour inattendu, quand un paramètre vide est testé sans protection.\\ ​
 +Sauf avec la commande **<​nowiki>​[[</​nowiki>​**.
 +
 +<code user>
 +test -n $p ; echo $?
 +[ -n $p ] ; echo $?
 +
 +p=""​
 +[[ -n $p ]] ; echo $?
 +
 +unset p
 +</​code><​file>​
 +0
 +0
 +1
 +</​file>​
 +
 +==== Astuces ====
 +
 +Avec la directive **-z**, nous pouvons nous affranchir de la protection des guillemets en utilisant __le remplacement des paramètres__ et l'​opérateur **+**.\\ ​
 +(Voir [[https://​debian-facile.org/​doc:​programmation:​shells:​man-bash-vi-les-caracteres-de-transformation-de-parametres#​substitution-par-modification|Substitution de la valeur d'un paramètre]])
 +<code user>
 +p="​Debian GNU Linux"
 +
 +test -z ${p+x} ; echo $?
 +
 +unset p
 +[[ -z ${p+x} ]] ; echo $?
 +</​code><​file>​
 +1
 +0
 +</​file>​
 +
 +Lors du remplacement d'un paramètre, l’opérateur **+** permet, si la valeur du paramètre est non nulle, de la substituée par une autre valeur (ici **x**).
 +
 +Avec la directive **-n** les guillemets restent nécessaires au cas ou le paramètre mémorise une chaîne vide, sauf avec la commande **<​nowiki>​[[</​nowiki>​**.
 +
 +<code user>
 +p="​Debian Facile"​
 +
 +[[ -n ${p+x} ]] ; echo $?
 +[[ ${p+x} ]] ; echo $?
 +
 +unset p
 +[[ -n ${p+x} ]] ; echo $?
 +[[ ${p+x} ]] ; echo $?
 +</​code><​file>​
 +0
 +0
 +1
 +1
 +</​file>​
 +
 +===== Comparaison entre deux chaînes =====
  
 Les commandes de test disposent de 5 primitives binaires pour comparer deux chaînes entre elles. Les commandes de test disposent de 5 primitives binaires pour comparer deux chaînes entre elles.
Ligne 152: Ligne 289:
 </​note>​ </​note>​
  
-<​code ​usert>+<​code ​user>
 a="​sloiuy"​ a="​sloiuy"​
 b="​aktgjaùkjayaj"​ b="​aktgjaùkjayaj"​
Ligne 187: Ligne 324:
 echo $? echo $?
 </​code><​file>​ </​code><​file>​
-echo $? 
 bash: test: GNU : opérateur unaire attendu bash: test: GNU : opérateur unaire attendu
 2 2
Ligne 209: Ligne 345:
 =====Tuto précédent ===== =====Tuto précédent =====
  
-[[doc:programmation:shells:la-page-man-bash-les-caracteres-speciaux|Bash : Détail et caractères]]+[[atelier:chantier:bash:les-operateurs-sur-parametres|Bash : Les opérateurs de test sur paramètres]]
  
 =====La suite c'est ici ===== =====La suite c'est ici =====
  
-[[doc:programmation:shells:page-man-bash-iii-les-operateurs-de-comparaison-numerique|Bash : les opérateurs de comparaison numérique]]+[[atelier:chantier:bash:​les-operateurs-de-test-sur-fichiers|Les opérateurs de test sur fichiers]]
doc/programmation/shells/la-page-man-bash-ii-les-operateurs-lexicographiques.1676935593.txt.gz · Dernière modification: 21/02/2023 00:26 par agp91

Pied de page des forums

Propulsé par FluxBB