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 : Bash : les opérateurs lexicographiques
4) chap IV : C'est ici !
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
Contributeurs, les sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !
Comme aux chapitre précédent on retrouve les opérateurs de comparaison booléens de comparaison (== , != , < , > , >=, ⇐ , ! )
et des caractères de comparaisons relatifs aux commandes de tests.
Opérateur | Description |
---|---|
= | initialisation d'une constante numérique (ne pas confondre avec = de l'affectation de variable qui n'a pas d'espace autour de lui) |
== | Comparaison d'un égalité |
!= | Comparaison d'une différence |
> | Comparaison de plus grand que |
>= | Comparaison de plus grand ou égal que |
< | Comparaison de plus petit que |
⇐ | Comparaison de plus petit ou égal que |
(( a = 23 )) # Initialiser une valeur, style C, avec des espaces des deux # côtés du signe "=". (("$a" < "$b")) (("$a" <= "$b")) (("$a" > "$b"))
(( nombre1 = 12 )) #puis (( nombre2 = 13 )) #puis (( "$nombre1" > "$nombre2" )) #puis echo $?
retour :
1
#!/bin/bash a=23 b=2 if (( "$a" < "$b" )) ; then echo " " fi echo "$a n'est pas inférieur à $b"
Remarquez bien :
./mon-script
retour :
23 n'est pas inférieur à 2
le code de retour est celui de l'exécution de la dernière commande (“echo “$a n'est pas inférieur à $b” ”)du script !
echo $?
retour :
0
(Voir l'utilisation de la commande exit dans les script)
a=23 b=2 if (( "$a" > "$b" )) ; then echo "$a > $b" fi echo " " c="23" d="24" if test "$a" > "$b" ; then echo "Attention ! incohérence "$c" > "$d" car avec test et crochets, il doit s'agir de chaînes de caractères." fi echo " " e="26" f="25" if [ "$a" > "$b" ] ; then echo "De même, Attention ! incohérence "$e" > "$f" car avec test et crochets, il s'agit exclusivement de chaînes de caractères." fi
Retour:
23 > 2 Attention ! incohérence 23 > 24 car avec test et crochets, il s'agit exclusivement de chaînes de caractères. De même, Attention ! incohérence 26 > 25 car avec test et crochets, il s'agit exclusivement de chaînes de caractères.
(pour comparer des nombres comme avec les booléens, mais avec la commande test ou crochets)
Caractère | |
---|---|
-eq | est égal à |
-ne | n'est pas égal à |
-gt | est plus grand que |
-ge | est plus grand ou égal à |
-lt | est plus petit que |
-le | est plus petit ou égal à |
[ "$a" -eq "$b" ] [ "$a" -ne "$b" ] ["$a" -gt "$b" ] [ "$a" -ge "$b" ] [ "$a" -lt "$b" ] [ "$a" -le "$b" ]
test "$a" -eq "$b" test "$a" -ne "$b" test "$a" -gt "$b" test "$a" -ge "$b" test "$a" -lt "$b" test "$a" -le "$b"
[ 25 -eq 20 ] #puis echo $?
retour :
1
ou encore dans le même terminal :
var1=17 var2=18 [ "$var1" -gt "$var2" ] echo $?
test 17 -gt 11 #puis echo $?
retour:
0
De même :
var2=11 test "$var1" -gt "$var2" echo $?
retour :
0
#!/bin/bash a=2 b=1 if [ "$a" -gt "$b" ] then echo "$a est plus grand que $b" fi
if test 100 -gt 99 then echo "vrai" #réponse : vrai else echo "faux" fi
OU mieux :
test 100 -gt 99 && echo "vrai" || echo "faux" # retour : vrai
test 100 -lt 99 && echo "vrai" || echo "faux" # retour : faux
MAIS
[ "LEbash" = "Labash" ]; echo $? #réponse 1 car l'expression est fausse.
[ 5 -eq 5 ]; echo $? # réponse : 0 car l'expression est vraie
#!/bin/bash var1=8 var2=7 if test "$e" -gt "$f" ; then echo " $var1 est plus grand que $var2 " fi echo " " if test 8 -gt 7 ; then echo " $var1 est plus grand que $var2 " fi
retour:
: ligne 18 : test: : nombre entier attendu comme expression 8 est plus grand que 7
1) qu'il y a deux mécanismes pour effectuer des tests, la paire de crochets et la commande test;
2) qu'à chaque mécanisme sa syntaxe :
test expression ou bien [ expression ] $ test -f /etc/gaga $ [ -f /etc/gaga ] $ echo $? $ echo $? 1 1 $ $
(Si le fichier /etc/gaga existait, le code de retour serait 0.)
3) qu'il était possible de faire des tests sur les chaînes de caractères (avec commande test ou les crochets) ; sur les fichiers (avec commande test ou les crochets).
4) que, pour des comparaisons sur les nombres on utilise :
5) qu'on utilise exclusivement les options -eq ; -ne ; -gt ; -ge ; -lt ; -le sur les nombres mais pas sur les chaînes de caractères ;
6) qu'on ne confondra pas avec les précédentes, les options qu'on utilise exclusivement pour tester les fichiers : -e ; -d ; -f ; -L ; -r ; -w ; -x ; $fichier1 -nt $fichier2 ; $fichier1 -ot $fichier2
Ils s'utilisent avec les tests.
Opérateur | Signification |
---|---|
! | Négation |
-a | ET |
-o | OU |
Et dans un ordre précis :
Le fichier “toto” n'est pas un répertoire :
[ ! -d /etc/group ] echo $? 0
Le fichier mon-script existe et est exécutable :
[ -f mon-script -a -x mon-script ] echo $? 0