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 [24/05/2014 12:00]
Hypathie [Bash : les opérateurs lexicographiques]
doc:programmation:shells:la-page-man-bash-ii-les-operateurs-lexicographiques [21/02/2023 00:26]
agp91 [Opérateurs sur les chaînes]
Ligne 1: Ligne 1:
-======Bash : les opérateurs lexicographiques ====== 
  
-  ​* Objet : Ne plus confondre ​les différents ​caractères ​de BASH+====== Bash : Les opérateurs de test sur chaînes ====== 
 + 
 +  ​* Objet : Suite de la série de wiki visant à maîtriser bash via les caractères.
   * Niveau requis : {{tag>​débutant}}   * Niveau requis : {{tag>​débutant}}
-  * Commentaires : //Contexte d'​utilisation du sujet du tuto. // FIXME+  * 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à !.]] :-)   * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
-  * Suivi : {{à-tester ​à-placer}}  +  * Suivi :  {{tag>à-tester}} 
-    * Création par **Hypathie** 08/​04/​2014 +    * Création par [[user>Hypathie]] le 08/​04/​2014 
-    * Testé par <​Hypathiele <Avril 2014> FIXME +    * Testé par [[user>Hypathie]] en Avril 2014 
-  Commentaires sur le forum : [[https://​debian-facile.org/​viewtopic.php?​pid=87499#​p87499 ​Lien vers le forum concernant ce tuto]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) FIXME+    Modifié par [[user|agp91]] le 21/02/2022
  
-**Nota suite du petit commentaire sur la page man Bash**\\ ​+  ​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 !)) 
  
-1) Intro I :  [[atelier:​chantier:​bash-les-differents-caracteres-speciaux|Bash : Introduction]]\\ +  * [[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]] 
 +  * [[atelier:​chantier:​bash:les-operateurs-sur-parametres|Les opérateurs de test sur paramètres]] 
 +  * **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]]
  
-2) chap II : [[atelier:​chantier:​la-page-man-bash-les-caracteres-speciaux|Bash : Détail et caractères]]\\ ​+===== Introduction =====
  
-3) chap III : C'est ici !\\  
  
-4) chap IV : [[atelier:​chantier:​page-man-bash-iii-les-operateurs-de-comparaison-numerique|Bash : les opérateurs de comparaison numérique]]\\ ​+<​note>​ 
 +Dans la page du manuel de bash, **les opérateurs ​des commandes ​de test** sont nommées __**primitives**__. 
 +</​note>​
  
-5) chap V : [[atelier:​chantier:​page-man-bash-iv-symboles-dans-les-calculs-mathematiques|Bash : les symboles dans les calculs]]\\ ​+Bash dispose de plusieurs commandes pour **réaliser des tests sur des chaînes de carractères**.
  
-6) chap VI : [[atelier:​chantier:page-man-bash-v-les-tableaux|Bash : les tableaux]]\\ ​+  * Les commandes internes **[** et **test**. 
 +  * Et la commande composée **<​nowiki>​[[</​nowiki>​**. 
 +<​note>​ 
 +  * 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. 
 +</​note>​
  
-7) chap VII [[atelier:​chantier:​man-bash-vi-les-caracteres-de-transformation-de-parametres|Bash : les caractères de transformation de parametres]]\\ ​+<​note>​ 
 +__Rappels ​:__
  
-8chap VIII : [[atelier:​chantier:​bash-vii-globs-etendus-regex]]+  *  Une commande de test renvoie le code de retour 0 (considérer comme vrailorsque 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. 
 +</​note>​
  
-Contributeurs,​ les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !+Les commandes de test disposent de 5 primitives binaires ​pour comparer deux chaînes entre elles.
  
-=====Opérateurs lexicographiques =====+==== Syntaxe ​====
  
-====1) Caractères de comparaison sur les chaînes de caractères ==== +  * **test chaîne1 OP chaîne2** 
-  *Le shell bash utilise les opérateurs booléens sur les chaînes de caractère : == , != , >=, <= ,  +  * **[ chaîne1 OP chaîne2 ]** 
-  ​*contexte : conditions (voir man bash lignes 2498-2513+  * **<nowiki>[[</​nowikichaîne1 OP chaîne2 ​<nowiki>​]]</​nowiki>​**
  
-^ Condition ​           ^ Signification ​                           ^ +  ​* Avec : 
-|$chaine1 = $chaine2 ​  ​| est égal                                 | +    * **Chaîne1** et **chaîne2** sont sujettes au développement des paramètres. 
-|$chaîne1 == $chaîne2 ​ | synonyme de =                            | +    * **OP**, ​l'un des opérateur du tableau suivant.
-|$chaine1 != $chaine2 ​ | n'est pas égal à                         | +
-|$chaine1 < $chaîne2 ​  | avant (selon ​l'ordre alphabétique ASCII) | +
-|$chaine1 < $chaîne2 ​  | après (ASCII) ​                           |+
  
-  *Pour effectuer des comparaisons sur les chaînes de caractère((Voir Man bash ligne 2410 et man test ligne 39)) : les options -z et -a sont communes aux deux cas suivants : +<note
-<code+Si un opérande ​(**chaîne1** ou **chaîne**2est une chaîne vide, ou contient des espaces,\\  
-Le shell bash utilise les commandes internes et composées [[ ]] ou [ ] +Il doit être protégé, placé entre guillemets simples ou doubles
-(souvent utilisées avec IFpour les comparaisons de chaînes de caractères+</note>
-</code>+
  
-C'est pourquoi on trouve souvent les options -z et -a du tableau ci-dessous, ajoutées au tableau ci-dessus :  +|  Listes des primitives de comparaison entre deux chaînes ​ || 
-Condition ​           ​Signification ​         ​+Primitives Retours
-|-z $chaine ​           ​| ne contient rien       +''​= ''​ Vrai si **Chaîne1** correspond à **Chaîne2** . | 
-|-n $chaine ​           ​contient quelque-chose ​+| ''​==''​ | Synonyme de **=** | 
 +| ''​!=''​ | Vrai si **Chaîne1** ​ne correspond pas à **Chaîne2**.
 +''<''​ Vrai si **chaine1** est placée lexicographiquement avant **chaine2** | 
 +| ''>''​ | Vrai si **chaine1** est placée lexicographiquement après **chaine2** |
  
-  *remarques :+==== Exemples ==== 
 + 
 +<note important>​
 __-bashismes :__ __-bashismes :__
 <​code>​ <​code>​
 [[ $a == "​z*"​ ]]  # vrai si $a est égal à z* [[ $a == "​z*"​ ]]  # vrai si $a est égal à z*
 [[ $a == z* ]]    # vrai si $a commence avec un "​z"​ (reconnaissance de modèles) [[ $a == z* ]]    # vrai si $a commence avec un "​z"​ (reconnaissance de modèles)
-if [[ "​$a"​ < "​$b"​ ]]+[[ "​$a"​ < "​$b"​ ]] # vrai si $a se trouve avant $b dans le dictionnaire
 </​code>​ </​code>​
-__ +__-posix :__
--posix :__+
  
 <​code>​ <​code>​
-[ "​$a" ​== "​z*"​ ]  # vrai si $a est égal à z* +[ "​$a"​ = "​z*"​ ]  # vrai si $a est égal à z* 
-if [ "​$a"​ \< "​$b"​ ]+[ "​$a"​ \< "​$b"​ ] # vrai si $a se trouve avant $b dans le dictionnaire
 </​code>​ </​code>​
 +</​note>​
  
 +<code user>
 +test "​GNU"​ == "​GNU"​ ] ; echo $?
 +[[ "​GNU"​ != "GNU Linux" ]] ; echo $?
 +</​code><​file>​
 +0
 +0
 +</​file>​
  
-====2) Caractères de comparaison de fichiers==== +>Donc la chaîne "​GNU"​ est identique ​à elle-même ;), mais pas à "GNU Linux".
-  *Le shell bash  +
-<code> +
-Il permet d'​effectuer aussi des comparaisons sur les fichiers avec  +
-les commandes internes et composées [[ ]] et [ ]] +
-(associées ​à IF ou non).  +
-Les commandes [[ ]] et [ ] suppléent la commande test. +
-Pour les comparaisons de nombreson peut utiliser aussi la commande test. +
-</​code>​+
  
-<​code>​ +<​code ​user> 
-if [[ option ​$FICHIER ]+v1="​Debian GNU Linux"​ 
-</​code> ​ +v2="​Debian Facile"​ 
- +if [ "$v1" = "​$v2" ​]  
 +then 
 + echo '​vrai'​ 
 +else 
 + echo '​faux'​ 
 +fi
  
-^ test                           ^ vérifie si :                                       ^ +unset v1 v2 
-|-e $nomfichier ​                 | le fichier existe ​                                ​| ​ +</​code><​file>​ 
-|-d $nomfichier ​                 | le fichier est un répertoire ​                     | +faux 
-|-f $nomfichier ​                 | le fichier est un document ​                       | +</​file>​
-|-L $nomfichier ​                 | le fichier est un lien symbolique ​                |  +
-|-r $nomfichier ​                 | le fichier est lisible ​                           | +
-|-w $nomfichier ​                 | le fichier est modifiable ​                        | +
-|-x $nomfichier ​                 | le fichier est exécutable ​                        | +
-|$fichier1 -nt $fichier2 ​        | fichier1 est plus récent que fichier2 (newerthan) | +
-|$fichier1 -ot $fichier2 ​        | fichier1 est plus vieux que fichier2 (olderthan) ​ |+
  
-Exemple : +>Donc les deux chaînes contenues dans les variables v1 et v2 ne sont pas égales. 
-<​code>​+ 
 +Copions le code suivant dans le fichier **mon_script**. 
 + 
 +<​code ​bash mon_script>
 #!/bin/bash #!/bin/bash
-var="/​home/​hypathie/​Dossier/​fichierp1+var1="def" 
-if [ -e "$var" ] +var2="​def
-then +if [ "$var1" == "$var2" ] then 
-  echo "le fichier existe !+   ​echo "1) \$var1 ($var1) correspond(==) à \$var2 ($var2).
-else +fi 
-  echo "fichier inexistant !"+  
 +var3="​hip"​ 
 +var4="​hip"​ 
 +if test "​$var3"​ = "​$var4" ​ ; then 
 +   echo "2) \$var3 ($var3) correspond(=) à \$var4 ($var4)." 
 +fi 
 +</​code><​code user> 
 +bash mon_script
  
 +rm -v mon_script
 +</​code><​file>​
 +1) $var1 (def) correspond(==) à $var2 (def).
 +2) $var3 (hip) correspond(=) à $var4 (hip).
 +'​mon_script'​ supprimé
 +</​file>​
 +
 +Les commandes de test permettent de réaliser des test de comparaison lexicographique.\\
 +(voir [[https://​debian-facile.org/​atelier:​chantier:​bash-comparaison-lexicographique-des-chaines|https://​debian-facile.org/​atelier:​chantier:​bash-comparaison-lexicographique-des-chaines]].)
 +
 +<note important>​
 +Attention de ne pas confondre les primitives de comparaison lexicographique sur les chaînes avec les  [[https://​debian-facile.org/​doc:​programmation:​shells:​page-man-bash-iii-les-operateurs-de-comparaison-numerique#​operateurs-booleens-de-comparaison-numerique|opérateurs de comparaison numérique]] qui utilisent les mêmes caractères.
 +</​note>​
 +
 +<code usert>
 +a="​sloiuy"​
 +b="​aktgjaùkjayaj"​
 +
 +if [[ $a < $b ]] ; then 
 +   echo "OK l'​opérateur < fonctionne avec les chaînes de caractère"​
 fi fi
-var2="/​home/​hypathie/​Dossier/​fichierp1"​ 
-if [ -s "​$var2"​ ] 
-then 
-  echo "non vide !" 
-else 
-  echo "vide !" 
  
 +if [[ $a > $b ]] ; then 
 +   echo "Les opérateurs < et > signifient avant et après selon l'​ordre alphabétique (doubles crochets) "
 fi fi
-</​code>​ 
  
 +if [ $a \> $b ] ; then 
 +   echo "Les opérateurs \< et \> signifient avant et après selon l'​ordre alphabétique (simples crochets) "
 +fi
 +</​code><​file>​
 +OK L'​opérateur < fonctionne avec les chaînes de caractère
 +Les opérateurs < et > signifient avant et après selon l'​ordre alphabétique (doubles crochets)
 +Les opérateurs \< et \> signifient avant et après selon l'​ordre alphabétique (simples crochets) ​
 +</​file>​
 +
 +<​note>​
 +Avec les commandes **[** ou **test**, les primitives **<** et **>** doivent être protégées.\\ ​
 +(Voir [[https://​debian-facile.org/​atelier:​chantier:​bash-comparaison-lexicographique-des-chaines#​tests-avec1|Comparaison lexicographique avec [ ou test.]])
 +</​note>​
 +
 +==== Mauvais usages ====
 +
 +Les deux opérandes sont obligatoires.
 +
 +<code user>
 +test GNU ==  ; echo $?
 +[[ != LINUX ]]
 +echo $?
 +</​code><​file>​
 +echo $?
 +bash: test: GNU : opérateur unaire attendu
 +2
 +bash: opérateur binaire conditionnel attendu
 +bash: erreur de syntaxe près de « LINUX »
 +2
 +</​file>​
 +
 +Les espaces entre les opérandes et la primitive sont obligatoires.
 +
 +<code user>
 +[ "GNU Linux"​=="​LINUX"​ ] ; echo $?
 +</​code><​file>​
 +0
 +</​file>​
 +
 +Sans espace entre les opérande et la primitive "GNU Linux"​=="​LINUX"​ est compris comme une chaîne de caractère.\\ ​
 +N'​étant pas nulle, le test n'​échoue pas.
 +
 +
 +=====Tuto précédent =====
  
-===La suite c'est ici : === +[[doc:programmation:shells:la-page-man-bash-les-caracteres-speciaux|Bash : Détail et caractères]]
-[[atelier:chantier:​page-man-bash-iii-les-operateurs-de-comparaison-numerique]]+
  
-===Tuto précédent ​=== +=====La suite c'est ici =====
-[[atelier:​chantier:​la-page-man-bash-les-caracteres-speciaux?&#​les-caracteres-speciaux]]+
  
 +[[doc:​programmation:​shells:​page-man-bash-iii-les-operateurs-de-comparaison-numerique|Bash : les opérateurs de comparaison numérique]]
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