Pascal BEAUSSART

let


La commande let ne peux évaluer que des expressions arithmétiques (y compris dans des bases non décimales). La réponse VRAI correspond à un résultat différent de zéro. La réponse FAUX correspond à un résultat égal à zéro.

Expressions arithmétiques Exemple Résultat
! négation logique, (( !17 )) 0
~ négation bit à bit, ((~0 )) -1
* multiplication, (( 2*3 )) 6
/ division, (( 8/2 )) 4
% modulo, (reste) (( 16/7 )) 2
+ addition, (( 5+2 )) 7
- substraction (( 5-2 )) 3
ou signe négatif (( -5-2 )) -7
<< décallage à gauche (( 2<<4 )) 32
>> décallage à droite (( 32>>4 )) 2
& et logique bit à bit (( 2#101&2#110 )) 4 (2#100)
| ou logique bit à bit (( 2#101|2#110 )) 7 (2#111)
^ ou exclusif bit à bit (( 2#101^2#110 )) 3 (2#011)
&& et entre 2 expressions cd $rep && x=0 || x=1 Si le changement de répertoire a pu se faire x=0 sinon x=1
|| ou entre 2 expressions
= affectation x=5 x vaut 5
op= affectation composée
op est l'un des opérateurs ci-dessus
x+=5 x=x+5

Opérateur de comparaison :
== égal != différent (not egal)
<= inférieur ou égal >= supérieur ou égal
> strictement supérieur < strictement inférieur

Ainsi la syntaxe : if (( 1 )) est correcte. Elle correspond à une réponse VRAI

Exemple : Test du code retour d'une commande

 rep=/travail
 cd $rep
 if (( $? ))
 then echo "Le répertoire $rep n'a pas pu être atteint"
      exit 1
 fi
 rm -f *    # mieux vaut vérifier avant d'agir ! Non ?
8 niveaux de profondeurs sont disponibles pour évaluer une expression, ainsi
 a=1; b=a+1; c=b+1; d=c+1; e=d+1; f=e+1; g=f+1; h=g+1; i=h+1 
 echo "$h=$((h))"     # g+1=8 : $h correspond à g+1 (non évalué)
 echo "$i=$((i))"     # Erreur car 9 niveaux de récurrence.
Pour exprimer un nombre dans une autre base, il faut l'entrer sous la forme base#nombre.
Exemple : 16#b exprime le nombre 11 décimal.


[RETOUR] [HOME]