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) |
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) On peut utiliser la commande test ou les crochets pour effectuer des tests sur les chaînes de caractères :
#!/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 var1="def" var2="def" if test $var1 == $var2 ; then echo "2) test de correspondance chaîne de caractères sur valeur de variable: \$var1:"$var1" correspond(==) à \$var2:"$var2"." fi
Retour de ./mon-script :
1)test de correspondance chaîne de caractères sur valeur de variable: $var1:def correspond(==) à $var2:def. 2) test de correspondance chaîne de caractères sur valeur de variable: $var1:def correspond(==) à $var2:def.
2) 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 test sur les fichiers dans le terminal avec les crochets :
[ -f ~/toto ] #puis echo $?
retour :
0
Et voilà !