Syntaxe :
expr $nbr1 opérateur $nbr2
	expr $chaine : expression régulière
Opérateurs :
Attention, certains opérateurs ayant une signification particulière pour le shell, ceux ci doivent être protégés par un antislash.
| Opérateurs | Signification | 
|---|---|
| Opérateurs arithmétiques | |
| $nb1 + $nb2 | Addition | 
| $nb1 - $nb2 | Soustraction | 
| $nb1 \* $nb2 | Multiplication | 
| $nb1 / $nb2 | Division | 
| $nb1 % $nb2 | Modulo | 
| Opérateurs de comparaison | |
| $nb1 \> $nb2 | VRAI si $nb1 est strictement supérieur à $nb2 | 
| $nb1 \>= $nb2 | VRAI si $nb1 est supérieur ou égal à $nb2 | 
| $nb1 \< $nb2 | VRAI si $nb1 est strictement inférieur à $nb2 | 
| $nb1 \<= $nb2 | VRAI si $nb1 est inférieur ou égal à $nb2 | 
| $nb1 = $nb2 | VRAI si $nb1 est égal à $nb2 | 
| $nb1 != $nb2 | VRAI si $nb1 est diférent de $nb2 | 
| Opérateurs logiques | |
| $chaine1 \& $chaine2 | VRAI si les 2 chaines sont vraies | 
| $chaine1 \| $chaine2 | VRAI si l'une des 2 chaines est vraie | 
| Opérateurs divers | |
| -$nb1 | Opposé de $nb1 | 
| \( expression \) | Regroupement | 
| $chaine : expression_reguliere | Compare la chaine avec l'expression régulière | 
Les arguments de la commande expr doivent toujours être séparés par au moins un espace ou une tabulation.
Exemple :
$ nb=3
	$ expr $nb + 5
	8
	$ expr $nb \* 6
	18
	$ expr $nb / 2
	1
	$ nb=10
	$ expr $nb % 3
	1
	$ expr $nb - -5
	15
	$
Récupérer le résultat dans une variable :
$ nb2=`expr $nb - 2`
	$ echo $nb2
	8
	$
Priorité d'exécution des opérateurs :
$ nb=5
	$ nb2=`expr $nb \* 3 + 4`
	$ echo $nb2
	19
	$ nb2=`expr $nb \* \( 3 + 4 \)`
	$ echo $nb2
	35
	$
Résultat d'une comparaison VS valeur du code de retour :
$ nb=2
	$ expr $nb \>= 1
	1                            # Résultat de la comparaison
	$ echo $?
	0                            # Résultat du code de retour
	$ expr $nb \>= 3
	0                            # Résultat de la comparaison
	$ echo $?
	1                            # Résultat du code de retour
	$
Différents types de comparaison :
$ nl comparaison.sh
	     1  #!/bin/bash
	 
	     2  # Test sur le nombre d'arguments
	     3  if [[ $# -ne 2 ]]
	     4  then
	     5          echo "Mauvais nombre d'arguments"
	     6          echo "Utilisation : $0 expr1 expr2"
	     7          exit 1
	     8  fi
	 
	     9  # On compare expr1 et expr2 avec la commande EXPR et redirection du résultat dans /dev/null
	    10  if expr $1 \> $2 > /dev/null
	    11  then
	    12          echo "Comparaison EXPR : $1 est supérieur à $2"
	    13  else
	    14          echo "Comparaison EXPR : $1 est inférieur à $2"
	    15  fi
	 
	    16  # On compare expr1 et expr2 avec la commande [[ ]] (lexicographiquement)
	    17  if [[ $1 > $2 ]]
	    18  then
	    19          echo "Comparaison lexico.. [[ ]] : $1 est supérieur à $2"
	    20  else
	    21          echo "Comparaison lexico.. [[ ]] : $1 est inférieur à $2"
	    22  fi
	 
	    23  # On compare expr1 et expr2 avec la commande [[ ]]
	    24  if [[ $1 -gt $2 ]]
	    25  then
	    26          echo "Comparaison [[ ]] : $1 est supérieur à $2"
	    27  else
	    28          echo "Comparaison [[ ]] : $1 est inférieur à $2"
	    29  fi
	 
	    30  exit 0
	$ ./comparaison.sh 9 5
	Comparaison EXPR : 9 est supérieur à 5
	Comparaison lexico.. [[ ]] : 9 est supérieur à 5
	Comparaison [[ ]] : 9 est supérieur à 5
	$ ./comparaison.sh 50 9
	Comparaison EXPR : 50 est supérieur à 9
	Comparaison lexico.. [[ ]] : 50 est inférieur à 9
	Comparaison [[ ]] : 50 est supérieur à 9
	$ ./comparaison.sh a b
	Comparaison EXPR : a est inférieur à b
	Comparaison lexico.. [[ ]] : a est inférieur à b
	Comparaison [[ ]] : a est inférieur à b
	$ ./comparaison.sh t r
	Comparaison EXPR : t est supérieur à r
	Comparaison lexico.. [[ ]] : t est supérieur à r
	Comparaison [[ ]] : t est inférieur à r
	$
Le résultat de la commande EXPR est toujours exact que ce soit des chiffres ou des caractères.