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 qui sont les mêmes voir : opérateurs booléens de comparaison numérique.
#!/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 crochet)
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 nombres, on peut utiliser aussi 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) |
Exemple :
#!/bin/bash var="/home/hypathie/Dossier/fichierp1" if [ -e "$var" ] then echo "le fichier existe !" else echo "fichier inexistant !" fi var2="/home/hypathie/Dossier/fichierp1" if [ -s "$var2" ] then echo "non vide !" else echo "vide !" fi