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 →
Ci-dessous, les différences entre deux révisions de la page.
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 | ||
atelier:chantier:bash-comparaison-lexicographique-des-chaines [13/02/2023 00:30] agp91 [Bash, comparaison lexicographique des chaînes] |
atelier:chantier:bash-comparaison-lexicographique-des-chaines [13/02/2023 00:48] agp91 [Bash, comparaison lexicographique des chaînes] |
||
---|---|---|---|
Ligne 8: | Ligne 8: | ||
* Création par [[user>agp91]] 12/02/2023 | * Création par [[user>agp91]] 12/02/2023 | ||
* Testé par <...> le <...> FIXME | * Testé par <...> le <...> FIXME | ||
- | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=392903#p392903| Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) FIXME | + | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=392903#p392903| Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) |
**Nota :** | **Nota :** | ||
Ligne 18: | Ligne 18: | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | La comparaison lexicographique entre deux chaîne permet de savoir si une chaîne est placée dans l'ordre lexicographique (comme dans un dictionnaire) avant ou après une autre chaîne. | + | La comparaison lexicographique entre deux chaînes permet de savoir si une chaîne est placée dans l'ordre lexicographique (comme dans un dictionnaire) avant ou après une autre chaîne. |
Nous avons tous lu et relu (peut-être même archi lu;) le manpage de bash (RTFM).\\ | Nous avons tous lu et relu (peut-être même archi lu;) le manpage de bash (RTFM).\\ | ||
Ligne 46: | Ligne 46: | ||
* Une commande de test renvoie le code de retour true (0) lorsque le test réussi et false (1) lorsqu'il échoue. | * Une commande de test renvoie le code de retour true (0) lorsque le test réussi et false (1) 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 **$?**. | ||
- | * La commande **<nowiki>&&</nowiki>** exécute la commande suivante, si la commande précédente à renvoie le code retour true (= 0). | + | * La commande **<nowiki>&&</nowiki>** exécute la commande suivante, si la commande précédente à renvoyée le code retour true (égale à 0). |
- | * La commande **<nowiki>||</nowiki>** exécute la commande suivante, si la commande précédente à renvoie le code retour false (!= 0). | + | * La commande **<nowiki>||</nowiki>** exécute la commande suivante, si la commande précédente à renvoyée le code retour false (différent de 0). |
Plus bas, nous utilisons //le méta caractère *****// dans le développement des chemins. L'option //**noglob**// ne doit donc pas être active.\\ | Plus bas, nous utilisons //le méta caractère *****// dans le développement des chemins. L'option //**noglob**// ne doit donc pas être active.\\ | ||
Ligne 99: | Ligne 99: | ||
faux</file> | faux</file> | ||
- | <code user>unset a b # Destruction des paramètre a et b.</code> | + | <code user>unset a b # Destruction des paramètres a et b.</code> |
Ici aucun problème :)) | Ici aucun problème :)) | ||
Ligne 129: | Ligne 129: | ||
Voici ce qu'il se passe :\\ | Voici ce qu'il se passe :\\ | ||
- | Dans une commande [ (ou test), les opérateurs < ou >, utilisés tels quels, ne sont pas des opérateurs de comparaison (lexicographique ou numérique).\\ | + | Dans une commande **[** (ou **test**), les opérateurs **<** ou **>**, utilisés tels quels, ne sont pas des opérateurs de comparaison lexicographique (ou numérique).\\ |
--> Ils restent des opérateurs de redirection ! | --> Ils restent des opérateurs de redirection ! | ||
- | En utilisant la commande test, nous pouvons peut-être mieux le visualiser : | + | En utilisant la commande **test**, nous pouvons peut-être mieux le visualiser : |
<code>test 42 > 4242</code> | <code>test 42 > 4242</code> | ||
Ligne 138: | Ligne 138: | ||
Pour preuve, l'exploration de notre répertoire de test suffira : | Pour preuve, l'exploration de notre répertoire de test suffira : | ||
- | <code user>echo * # Si l'option noglob n'est pas active, echo * est l'équivalent interne de la commande externe ls.</code> | + | <code user> |
- | <file config retour de la commande>4242 a z</file> | + | echo * # Si l'option noglob n'est pas active, echo * est l'équivalent interne de la commande externe ls.</code> |
+ | <file config retour de la commande> | ||
+ | 4242 a z | ||
+ | </file> | ||
Les fichiers 4242, a et z ont été créés par nos tests [ 42 > 4242 ], [ z > a ] et [ a > z ].\\ | Les fichiers 4242, a et z ont été créés par nos tests [ 42 > 4242 ], [ z > a ] et [ a > z ].\\ | ||
Ligne 145: | Ligne 148: | ||
Pour démonstration, retirons le droit d'écriture au répertoire test. | Pour démonstration, retirons le droit d'écriture au répertoire test. | ||
- | <code user>rm -v * | + | <code user> |
- | chmod -v a-w ../test</code> | + | rm -v * # Suppression de tout les fichiers présent dans le répertoire courant. |
- | <file config retour de la commande>4242' supprimé | + | chmod -v a-w ../test # Suppression du droit d'écriture pour tous du répertoire ../test. |
+ | </code> | ||
+ | <file config retour de la commande> | ||
+ | 4242' supprimé | ||
'a' supprimé | 'a' supprimé | ||
'z' supprimé | 'z' supprimé | ||
Ligne 155: | Ligne 161: | ||
Et re-testons : | Et re-testons : | ||
- | <code user>[ aa > az ] ; echo $?</code> | + | <code user> |
+ | [ aa > az ] ; echo $? | ||
+ | </code> | ||
<file config retour de la commande> | <file config retour de la commande> | ||
bash: az: Permission non accordée | bash: az: Permission non accordée | ||
- | 1</file> | + | 1 |
+ | </file> | ||
Le code de retour renvoie 1 (faux) car les fichiers az et 42 ne peuvent être créés et génèrent une erreur dans le test.\\ | Le code de retour renvoie 1 (faux) car les fichiers az et 42 ne peuvent être créés et génèrent une erreur dans le test.\\ | ||
Mais alors, le manpage de bash raconte des sottises ?\\ | Mais alors, le manpage de bash raconte des sottises ?\\ | ||
Non !\\ | Non !\\ | ||
- | Il y est simplement omis, que les opérateurs < et > doivent être protégés, pour être interprétés comme des opérateurs de comparaison lexicographique.\\ | + | Il y est simplement omis, que **les opérateurs < et > doivent être protégés**, pour être interprétés comme des opérateurs de comparaison lexicographique.\\ |
- | Les trois types de protection (\, entre guillemets simples et entre guillemets doubles) fonctionnent. | + | Les trois types de protection fonctionnent (**\**, entre guillemets simples **''** et entre guillemets doubles **""**). |
<code user>[ aa \> az ] && echo "vrai" || echo "faux" | <code user>[ aa \> az ] && echo "vrai" || echo "faux" |