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 !
RAPPEL DU PLAN DE LA SÉRIE :
1) Intro I : Bash : Introduction
2) chap II : Bash : Détail et caractères
3) chap III : C'est ici !
4) chap IV : Bash : les opérateurs de comparaison numérique
5) chap V : Bash : les symboles dans les calculs
6) chap VI : Bash : les tableaux
7) chap VII : Bash : les caractères de transformation de parametres
8) chap VIII : Bash : globs étendus et regex
Condition | Signification |
---|---|
$chaine1 = $chaine2 | est égal |
$chaîne1 == $chaîne2 | synonyme de = |
$chaine1 != $chaine2 | n'est pas égal à |
$chaine1 < $chaîne2 | avant (selon l'ordre alphabétique ASCII) |
$chaine1 > $chaîne2 | après (ASCII) |
$chaine >= $chaine | de longueur égale ou plus grande |
$chaine ⇐ | de longueur égale ou plus petite |
Le shell bash utilise les commandes internes et composées [[ ]] ou [ ] (souvent utilisées avec IF) pour les comparaisons de chaînes de caractères.
C'est pourquoi on trouve souvent les options -z et -a du tableau ci-dessous, ajoutées au tableau ci-dessus :
Condition | Signification |
---|---|
-z $chaine | ne contient rien |
-n $chaine | contient quelque-chose |
[[ $a == "z*" ]] # vrai si $a est égal à z* [[ $a == z* ]] # vrai si $a commence avec un "z" (reconnaissance de modèles) if [[ "$a" < "$b" ]]
-posix :
[ "$a" == "z*" ] # vrai si $a est égal à z* if [ "$a" \< "$b" ]
1) Dans le terminal, crochets ou commande test:
test1= #puis [ -n "$test1" ] #puis echo $?
Retour:
1 # Donc la chaîne de la variable test1 est égale à zéro.
test2=abc #puis test3=ab #puis [ "$test2" = "$test3" ] #puis echo $?
retour :
1 # Donc les deux chaînes de valeur contenue dans les variables test2 et test3 ne sont pas égales.
2) Dans les scripts c'est pareil !
#!/bin/bash var1="def" var2="def" if [ $var1 == $var2 ] ; then echo "1)test de correspondance chaîne de caractères sur valeur de variable: \$var1:"$var1" correspond(==) à \$var2:"$var2"." fi var3="hip" var4="hip" if test $var3 = $var4 ; then echo "2) test de correspondance chaîne de caractères sur valeur de variable: \$var3:"$var3" correspond(=) à \$var4:"$var4"." fi
Retour de ./mon-script :
1)test de correspondance chaîne de caractères sur valeur de variable: def:def correspond(==) à $var2:def. 2) test de correspondance chaîne de caractères sur valeur de variable: hip:hip correspond(=) à $var4:hip.
test4=tout-compris #puis test5=toutcompris #puis test $test4 = $test5 #puis echo $?
retour :
1 #donc les chaînes des deux valeurs sont différentes.
3) Attention de ne pas confondre les opérateurs de comparaison sur les chaînes de caractère avec les opérateurs booléens de comparaison numérique qui utilisent les mêmes symboles (mais avec la syntaxe doubles parenthèses et surtout pas de crochets).
#!/bin/bash a="sloiuy" b="aktgjaùkjayaj" if [[ $a < $b ]] ; then echo " " fi echo "OK l'opérateur < fonctionne avec les chaînes de caractère" if [[ $a > $b ]] ; then echo "Les opérateurs < et > signifient avant et après selon l'ordre alphabétique (doubles crochets) " fi echo " " if [ $a > $b ] ; then echo "Les opérateurs < et > signifient avant et après selon l'ordre alphabétique (simples crochets) " fi
Retour de ./mon-script :
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)
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.
if [[ option $FICHIER ]]
test | vérifie si : |
---|---|
-e $nomfichier | le fichier existe |
-d $nomfichier | le fichier est un répertoire |
-f $nomfichier | le fichier est un document |
-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) |
Avec commande test ou crochets (Soit le fichier ordinaire “toto” dans le répertoire courant de l'utilisateur)
#!/bin/bash var1="~/toto" if [ -f "$var1" ] then echo "le fichier existe !" else echo "fichier inexistant: le fichier existe mais dans un script il faut le chemin absolu du fichier testé !" fi var1="home/hypathie/toto" if [ -f "$var1" ] then echo "le fichier existe !" else echo "fichier inexistant !" fi echo " " var2="home/hypathie/toto" if test -f "$var2" then echo "le fichier existe !" else echo "fichier inexistant !" fi
Les tests sur les fichiers dans le terminal avec commande test : (Soit le fichier ordinaire “toto”)
test -f /home/hypathie/toto #puis echo $?
Retour :
0
Les tests sur les fichiers dans le terminal avec les crochets :
[ -f ~/toto ] #puis echo $?
retour :
0
Et voilà !