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
Prochaine révision Les deux révisions suivantes
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 [21/02/2023 01:06]
agp91 [Tester une chaîne (vide ou pas)]
Ligne 25: Ligne 25:
  
 ===== Introduction ===== ===== Introduction =====
- 
  
 <​note>​ <​note>​
Ligne 50: Ligne 49:
   *  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 209: Ligne 346:
 =====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-de-test-sur-fichiers|Bash : Les opérateurs de test sur fichiers]]
  
 =====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.txt · Dernière modification: 30/04/2023 01:23 par arpinux

Pied de page des forums

Propulsé par FluxBB