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 →
Ceci est une ancienne révision du document !
Bash dispose de plusieurs commandes pour réaliser des tests sur des chaînes de carractères.
Les commandes de test disposent de 5 primitives binaires pour comparer deux chaînes entre elles.
Listes des primitives de comparaison entre deux chaînes | |
Primitives | Retours |
---|---|
= | Vrai si Chaîne1 correspond à Chaîne2 . |
== | 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 |
[[ $a == "z*" ]] # vrai si $a est égal à z* [[ $a == z* ]] # vrai si $a commence avec un "z" (reconnaissance de modèles) [[ "$a" < "$b" ]] # vrai si $a se trouve avant $b dans le dictionnaire
-posix :
[ "$a" = "z*" ] # vrai si $a est égal à z* [ "$a" \< "$b" ] # vrai si $a se trouve avant $b dans le dictionnaire
test "GNU" == "GNU" ] ; echo $? [[ "GNU" != "GNU Linux" ]] ; echo $?
0 0
Donc la chaîne “GNU” est identique à elle-même ;), mais pas à “GNU Linux”.
v1="Debian GNU Linux" v2="Debian Facile" if [ "$v1" = "$v2" ] then echo 'vrai' else echo 'faux' fi unset v1 v2
faux
Donc les deux chaînes contenues dans les variables v1 et v2 ne sont pas égales.
Copions le code suivant dans le fichier mon_script.
#!/bin/bash var1="def" var2="def" if [ "$var1" == "$var2" ] ; then echo "1) \$var1 ($var1) correspond(==) à \$var2 ($var2)." fi var3="hip" var4="hip" if test "$var3" = "$var4" ; then echo "2) \$var3 ($var3) correspond(=) à \$var4 ($var4)." fi
bash mon_script rm -v mon_script
1) $var1 (def) correspond(==) à $var2 (def). 2) $var3 (hip) correspond(=) à $var4 (hip). 'mon_script' supprimé
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.)
a="sloiuy" b="aktgjaùkjayaj" if [[ $a < $b ]] ; then echo "OK l'opérateur < fonctionne avec les chaînes de caractère" fi if [[ $a > $b ]] ; then echo "Les opérateurs < et > signifient avant et après selon l'ordre alphabétique (doubles crochets) " fi if [ $a \> $b ] ; then echo "Les opérateurs \< et \> signifient avant et après selon l'ordre alphabétique (simples crochets) " fi
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)
Les deux opérandes sont obligatoires.
test GNU == ; echo $? [[ != LINUX ]] echo $?
echo $? bash: test: GNU : opérateur unaire attendu 2 bash: opérateur binaire conditionnel attendu bash: erreur de syntaxe près de « LINUX » 2
Les espaces entre les opérandes et la primitive sont obligatoires.
[ "GNU Linux"=="LINUX" ] ; echo $?
0
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.