0% ont trouvé ce document utile (0 vote)
6 vues47 pages

Chap4 Programmation Shell

Le document traite de la programmation shell sous Linux, en expliquant la structure et l'exécution des scripts, ainsi que la gestion des arguments, des tests de conditions et des structures de contrôle. Il aborde également des concepts tels que l'environnement du processus, la substitution de commandes et les tests sur les fichiers. Des exemples pratiques illustrent chaque concept pour faciliter la compréhension.

Transféré par

fv97vwzmp4
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues47 pages

Chap4 Programmation Shell

Le document traite de la programmation shell sous Linux, en expliquant la structure et l'exécution des scripts, ainsi que la gestion des arguments, des tests de conditions et des structures de contrôle. Il aborde également des concepts tels que l'environnement du processus, la substitution de commandes et les tests sur les fichiers. Des exemples pratiques illustrent chaque concept pour faciliter la compréhension.

Transféré par

fv97vwzmp4
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd

Linux

I. II. III. IV. V. VI. VII. VIII. IX.

Programmation shell

CHAPITRE IV
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
1) Structure et exécution d’un script

 Le shell n’est pas qu’un simple interpréteur de commandes, mais dispose d’un
véritable langage de programmation avec notamment une gestion des variables,
des tests et des boucles, des opérations sur les variables, des fonctions...

 Par convention les noms des shell scripts se terminent généralement (pas
obligatoirement) par « .sh »

 Pour rendre un script exécutable directement :

chmod u+x monscript

 Pour l’exécuter :

./monscript

 Pour éviter le ./ :

PATH=$PATH:.
monscript
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
1) Structure et exécution d’un script

 Une ligne de commentaire commence toujours par le caractère #. Un


commentaire peut être placé en fin d’une ligne comportant déjà des
commandes.

 La ligne suivante effectue un ls

ls # La ligne en question

 La première ligne a une importance particulière car elle permet de préciser quel
shell va exécuter le script :

#!/bin/bash
#!/bin/ksh

 Dans le premier cas c’est un script Bourne Again, dans l’autre un script Korn.
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
2) Arguments d’un script

 Paramètres de position

 Les paramètres de position sont aussi des variables spéciales utilisées lors d’un
passage de paramètres à un script.

Variable Contenu
$0 Nom de la commande (du script).
$1-9 $1,$2,$3... Les neuf premiers paramètres passés au script.
$# Nombre total de paramètres passés au script.
$* Liste de tous les paramètres au format "$1 $2 $3 . . . " .
$@ Liste des paramètres sous forme d’éléments distincts "$1"
"$2" "$3" . . .
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
2) Arguments d’un script

cat [Link]
#!/bin/bash
echo "Nom : $0"
echo "Nombre de parametres : $#"
echo "Parametres : 1=$1 2=$2 3=$3"
echo "Liste : $*"
echo "Elements : $@"

Exemple d‘execution
./[Link] riri fifi loulou
Nom : ./[Link]
Nombre de parametres : 3
Parametres : 1=riri 2=fifi 3=loulou
Liste : riri fifi loulou
Elements : riri fifi loulou
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
2) Arguments d’un script

 Redéfinition des paramètres

 Outre le fait de lister les variables, l’instruction set permet de redéfinir le


contenu des variables de position.

set valeur1 valeur2 valeur3 ...

$1 prendra comme contenu valeur1, $2 valeur2 et ainsi de suite.

cat [Link]
#!/bin/bash
echo "Avant :"
echo "Nombre de parametres : $#"
echo "Parametres : 1=$1 2=$2 3=$3 4=$4"
echo "Liste : $*"
set alfred oscar romeo zoulou
echo "apres set alfred oscar romeo zoulou"
echo "Nombre de parametres : $#"
echo "Parametres : 1=$1 2=$2 3=$3 4=$4"
echo "Liste : $*"
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
2) Arguments d’un script

./[Link] riri fifi loulou donald picsou


Avant :
Nombre de parametres : 5
Parametres : 1=riri 2=fifi 3=loulou 4=donald
Liste : riri fifi loulou donald picsou
apres set alfred oscar romeo zoulou
Nombre de parametres : 4
Parametres : 1=alfred 2=oscar 3=romeo 4=zoulou
Liste : alfred oscar romeo zoulou
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
2) Arguments d’un script

 Réorganisation des paramètres

 La commande shift est la dernière commande permettant de modifier la


structure des paramètres de position.

 Un simple appel décale tous les paramètres d’une position en supprimant le


premier : $2 devient $1 , $3 devient $2 et ainsi de suite.

 Le $1 originel disparaît. $# , $* et $@ sont redéfinis en conséquence.

 La commande shift suivie d’une valeur n effectue un décalage de n éléments.


Ainsi avec shift 4 $5 devient $1 , $6 devient $2, . ..
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
2) Arguments d’un script
cat [Link]
#!/bin/bash
set alfred oscar romeo zoulou
echo "set alfred oscar romeo zoulou"
echo "Nombre de parametres : $#"
echo "Parametres : 1=$1 2=$2 3=$3 4=$4"
echo "Liste : $*"
shift
echo "Après un shift"
echo "Nombre de parametres : $#"
echo "Parametres : 1=$1 2=$2 3=$3 4=$4"
echo "Liste : $*"
./[Link]
set alfred oscar romeo zoulou
Nombre de parametres : 4
Parametres : 1=alfred 2=oscar 3=romeo 4=zoulou
Liste : alfred oscar romeo zoulou
Après un shift
Nombre de parametres : 3
Parametres : 1=oscar 2=romeo 3=zoulou 4=
Liste : oscar romeo zoulou
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
2) Arguments d’un script

 Sortie de script

 La commande exit permet de mettre fin à un script.

 Par défaut la valeur retournée est 0 (pas d’erreur) mais n’importe quelle autre
valeur de 0 à 255 peut être précisée.

 Vous récupérez la valeur de sortie par la variable $?.

exit 1
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
3) Environnement du processus

 En principe seules les variables exportées sont accessibles par un processus


fils. Si vous souhaitez visualiser l’environnement lié à un fils (dans un script par
exemple) utilisez la commande env.

env
ESSKEY=/etc/[Link]
NNTPSERVER=news
INFODIR=/usr/local/info:/usr/share/info:/usr/info
MANPATH=/usr/local/man:/usr/share/man
KDE_MULTIHEAD=false
SSH_AGENT_PID=28012
HOSTNAME=slyserver
DM_CONTROL=/var/run/xdmctl
XKEYSYMDB=/usr/share/X11/XKeysymDB
HOST=p64p17bicb3
SHELL=/bin/bash
TERM=xterm
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
3) Environnement du processus

 La commande env permet de redéfinir aussi l’environnement du processus à


lancer.

 Cela peut être utile lorsque le script doit accéder à une variable qui n’est pas
présente dans l’environnement du père, ou qu’on ne souhaite pas exporter.

cat voir_a.sh
#!/bin/bash
echo "a=$a"

unset a
./voir_a.sh
a=
env a=jojo ./voir_a.sh
a=jojo
echo a=$a
a=
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
3) Environnement du processus

 La commande export permet d’exporter une variable de manière à ce que son


contenu soit visible par les scripts et autres sous-shells. Les variables exportées
peuvent être modifiées dans le script, mais ces modifications ne s’appliquent
qu’au script ou au sous-shell.

a=Jules
echo ’echo "a=$a"’ > voir_a.sh
chmod u+x voir_a.sh
./voir_a.sh
a=
export a
./voir_a.sh
a=Jules
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
4) Substitution de commande

 Le mécanisme de substitution permet de placer le résultat de commandes


simples ou complexes dans une variable. Vous placez les commandes à
exécuter entre des accents graves « ` » ([Alt Gr] 7).

mon_unix=`uname`
echo ${mon_unix}
Linux
machine=`uname -a | cut -d" " -f5`
echo $machine
SMP

 Avec les accolades et les parenthèses.


mon_unix=$(uname)
echo ${mon_unix}
Linux
machine=$(uname -a | cut -d" " -f5)
echo $machine
SMP
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
5) Tests de conditions

 La commande test permet d’effectuer des tests de conditions. Le résultat est


récupérable par la variable $? (code retour). Si ce résultat est 0 alors la
condition est réalisée.

 Tests sur une chaîne

test -z "variable" : zero, retour OK si la variable est vide (ex : test -z "$a").

test -n "variable" : non zero, retour OK si la variable n’est pas vide (texte
quelconque).

test "variable" = chaîne : OK si les deux chaînes sont identiques.

test "variable" ! = chaîne : OK si les deux chaînes sont différentes.


Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
5) Tests de conditions

a=
test -z "$a" ; echo $?
0
test -n "$a" ; echo $?
1
a=Jules
test "$a" = Jules ; echo $?
0
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
5) Tests de conditions

 Tests sur les valeurs numériques

 Les chaînes à comparer sont converties en valeurs numériques. Bash ne gère


que des valeurs entières. La syntaxe est :

test valeur1 option valeur2

Option Rôle
-eq Equal : égal
-ne Not Equal : différent
-lt Less than : inférieur
-gt Greater than : supérieur
-le Less or equal : inférieur ou égal
-ge Greater or equal : supérieur ou égal
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
5) Tests de conditions

a=10
b=20
test "$a" -ne "$b" ; echo $?
0
test "$a" -ge "$b" ; echo $?
1
test "$a" -lt "$b" && echo "$a est inferieur a $b"
10 est inferieur a 20

commande1 && commande2


commande1 || commande2

 La commande située après && sera exécutée uniquement si la commande


précédente a retourné 0 (réussite).

 La commande située après || ne sera exécutée que si la commande


précédente a retourné autre chose que 0.
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
5) Tests de conditions

 Tests sur les fichiers

 La syntaxe est :

test option nom_fichier

Option Rôle
-f Fichier normal.
-d Un répertoire.
-s Fichier non vide (au moins un caractère).
-e Le fichier existe.
-L Le fichier est un lien symbolique .
-x Autorisation en exécution.
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
5) Tests de conditions

ls -l
-rw-r--r-- 1 seb users 1392 Aug 14 15:55 [Link]
lrwxrwxrwx 1 seb users 4 Aug 14 15:21 lien_fic1 -> fic1
lrwxrwxrwx 1 seb users 4 Aug 14 15:21 lien_fic2 -> fic2
-rw-r--r-- 1 seb users 234 Aug 16 12:20 liste1
drwxr-xr-x 2 seb users 8192 Aug 19 12:09 rep1

test -f lien_fic1 ; echo $?


1
test -x [Link] ; echo $?
1
test -d rep1 ; echo $?
0
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
5) Tests de conditions

 Tests combinés par des critères ET, OU, NON

Critère Action
-a AND, ET logique
-o OR, OU logique
! NOT, NON logique

test -d "rep1" -a -w "rep1" && echo "rep1: repertoire,


droit en ecriture"

rep1: repertoire, droit en ecriture


Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
6) if ... then ... else

 La structure if then else fi est une structure de contrôle conditionnelle.

if <commandes_condition>
then
<commandes exécutées si condition réalisée>
else
<commandes exécutées si dernière condition pas réalisée>
fi
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
6) if ... then ... else

cat [Link]
#!/bin/bash
if [ $# -ne 0 ]
then
echo "$# parametres en ligne de commande"
else
echo "Aucun parametre; set alfred oscar romeo zoulou"
set alfred oscar romeo zoulou
fi
echo "Nombre de parametres : $#"
echo "Parametres : 1=$1 2=$2 3=$3 4=$4"
echo "Liste : $*"

./[Link] toto titi


2 parametres en ligne de commande
Nombre de parametres : 2
Parametres : 1=toto 2=titi 3= 4=
Liste : toto titi
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
6) if ... then ... else

./[Link]
Aucun parametre; set alfred oscar romeo zoulou
Nombre de parametres : 4
Parametres : 1=alfred 2=oscar 3=romeo 4=zoulou
Liste : alfred oscar romeo zoulou
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
7) Choix multiples case

 La commande case ... esac permet de vérifier le contenu d’une variable ou


d’un résultat de manière multiple.

case Valeur in
Modele1) Commandes ;;
Modele2) Commandes ;;
*) action_defaut ;;
esac
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
7) Choix multiples case

cat [Link]
#!/bin/bash
if [ $# -ne 0 ]
then
echo "$# parametres en ligne de commande"
else
echo "Aucun parametre; set alfred oscar romeo zoulou"
exit 1
fi
case $1 in
a*)
echo "Commence par a" ;;
b*)
echo "Commence par b" ;;
fic[123])
echo "fic1 fic2 ou fic3" ;;
*)
echo "Commence par n’importe" ;;
esac
exit 0
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
7) Choix multiples case

./[Link] "au revoir"


Commence par a
./[Link] bonjour
Commence par b
./[Link] fic2
fic1 ou fic2 ou fic3
./[Link] erreur
Commence par n’importe
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
8) Saisie de l’utilisateur

 La commande read permet à l’utilisateur de saisir une chaîne et de la placer


dans une ou plusieurs variable. La saisie est validée par [Entrée].

read var1 [var2 ...]

 Si plusieurs variables sont précisées, le premier mot ira dans var1, le second
dans var2, et ainsi de suite.

 S’il y a moins de variables que de mots, tous les derniers mots vont dans la
dernière variable.
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
8) Saisie de l’utilisateur

$ cat [Link]
#!/bin/bash
echo –e "Continuer (O/N) ? \c"
read reponse
echo "reponse=$reponse"
case $reponse in
O) echo "Oui, on continue" ;;
N) echo "Non, on s’arrête"
exit 0 ;;
*) echo "Erreur de saisie (O/N)"
exit 1 ;;
esac
echo –e "Pour continuer. Tapez deux mots ou plus :\c"
read mot1 mot2
echo –e "mot1=$mot1\nmot2=$mot2"
exit 0
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
8) Saisie de l’utilisateur

./[Link]
Continuer (O/N) ? O
reponse=O
Oui, on continue
Pour continuer. Tapez deux mots ou plus :salut les amis
mot1=salut
mot2=les amis
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les boucles

 Elles permettent la répétition d’un bloc de commandes soit un nombre limité de


fois, soit conditionnellement.

 Toutes les commandes à exécuter dans une boucle se placent entre les
commandes do et done.

 Boucle for

 La boucle for ne se base pas sur une quelconque incrémentation de valeur mais
sur une liste de valeurs, de fichiers ...

for var in liste


do
commandes à exécuter
done

 La liste représente un certain nombre d’éléments qui seront successivement


attribués à var.
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les boucles

 Avec une variable

cat [Link]
#!/bin/bash
for params in $@
do
echo "$params"
done
./[Link] test1 test2 test3
test1
test2
test3
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les boucles

 Avec une liste d’éléments explicite

 Chaque élément situé après le « in » sera utilisé pour chaque itération de la


boucle, l’un après l’autre.

cat [Link]
#!/bin/bash
for params in liste liste2 liste3
do
echo $params
done
./[Link]
liste
Liste2
liste3
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les boucles

 Avec des critères de recherche sur nom de fichiers.

 Si un ou plusieurs éléments de la liste correspond à un fichier ou à un motif de


fichiers présents à la position actuelle de l’arborescence, la boucle for considère
l’élément comme un nom de fichier.

cat [Link]
#!/bin/bash
for params in *
do
echo -e "$params \c"
type_fic=`ls -ld $params | cut -c1`
case $type_fic in
-) echo "Fichier normal" ;;
d) echo "Repertoire" ;;
l) echo "lien symbolique" ;;
*) echo "autre" ;;
esac
done
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les boucles

 Avec une substitution de commande

 Toute commande produisant une liste de valeurs peut être placée à la suite du
« in » à l’aide d’une substitution de commande. La boucle for prendra le résultat
de cette commande comme liste d’éléments sur laquelle boucler.

cat [Link]
#!/bin/bash
echo "Liste des utilisateurs dans /etc/passwd"
for params in `cat /etc/passwd | cut -d: -f1`
do
echo "$params "
done
./[Link]
liste des utilisateurs dans /etc/passwd
root
nobody
nobodyV
daemon
……
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les boucles

 Boucle while

 La commande while permet une boucle conditionnelle « tant que ». Tant que la
condition est réalisée, le bloc de commande est exécuté. On sort si la condition
n’est plus valable.

while condition
do
commandes
done

 ou :

while
bloc d’instructions formant la condition
do
commandes
done
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les boucles

cat [Link]
#!/bin/bash
while
echo –e "Chaine ? \c"
read nom
test -z "$nom"
do
echo "ERREUR : pas de saisie"
done
echo "Vous avez saisi : $nom"

 Lecture d’un fichier ligne à ligne

#!/bin/bash
cat [Link] | while read line
do
echo "$line"
done
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les boucles

 Boucle until

 La commande until permet une boucle conditionnelle « jusqu’à ». Dès que la


condition est réalisée, on sort de la boucle.

until condition
do
commandes
done

 ou :

until
bloc d’instructions formant la condition
do
commandes
done
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les boucles

 true et false

 La commande true ne fait rien d’autre que de renvoyer 0. La commande


false renvoie toujours 1. De cette manière il est possible de réaliser des
boucles sans fin. La seule manière de sortir de ces boucles est un exit ou un
break.

while true
do
commandes
exit / break
done
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les boucles

 break et continue

 La commande break permet d’interrompre une boucle. Dans ce cas le script


continue après la commande done. Elle peut prendre un argument numérique
indiquant le nombre de boucles à sauter,

while true
do
echo –e "Chaine ? \c"
read a
if test -z "$a"
then
break
fi
done

 La commande continue permet de relancer une boucle et d’effectuer un


nouveau passage. Elle peut prendre un argument numérique indiquant le
nombre de boucles à relancer (on remonte de n boucles). Le script redémarre à
la commande do.
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les boucles

 Boucle select

 La commande select permet de créer des menus simples, avec sélection par
numéro. La saisie s’effectue au clavier avec le prompt de la variable PS3. Si la
valeur saisie est incorrecte, une boucle s’effectue et le menu s’affiche à
nouveau. Pour sortir d’un select il faut utiliser un break.

select variable in liste_contenu


do
traitement
done

 Si in liste_contenu n’est pas précisé, ce sont les paramètres de position qui sont
utilisés et affichés.
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les boucles

#!/bin/bash
PS3="Votre choix :"
echo "Quelle donnee ?"
select reponse in Jules Romain Francois quitte
do
if test "$reponse" = "quitte"
then
break
fi
echo "Vous avez choisi $reponse"
done
echo "Au revoir."
exit 0
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
9) Les fonctions

 Les fonctions sont des bouts de scripts nommés, directement appelés par leur
nom, pouvant accepter des paramètres et retourner des valeurs. Les noms de
fonctions suivent les mêmes règles que les variables sauf qu’elles ne peuvent
pas être exportées.

nom_fonction ()
{
commandes
return
}

cat fonction
l_l ()
{
ls -l $@
}
l_i ()
{
ls -i $@
}
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
10) Calculs et expressions

 expr

 La commande expr permet d’effectuer des calculs sur des valeurs numériques,
des comparaisons
Opérateur Rôle
+ Addition.
- Soustraction.
* Multiplication. L’étoile étant reconnue par le shell comme un
wildcard, il faut la verrouiller avec un antislash : \ * .
/ Division.
% Modulo.
!= Différent. Affiche 1 si différent, 0 sinon.
= Égal. Affiche 1 si égal, 0 sinon.
< Inférieur. Affiche 1 si inférieur, 0 sinon.
> Supérieur. Affiche 1 si supérieur, 0 sinon.
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
10) Calculs et expressions

expr 7 + 3
10
expr 7 \* 3
21
a=$(expr 13 - 10)
echo $a
3

cat [Link]
#!/bin/bash
cumul=0
compteur=0
nb_boucles=10
while test "$compteur" -le "$nb_boucles"
do
cumul=$(expr $cumul + $compteur)
echo "cumul=$cumul, boucle=$compteur"
compteur=$(expr $compteur + 1)
done
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
10) Calculs et expressions

./[Link]
cumul=0, boucle=0
cumul=1, boucle=1
cumul=3, boucle=2
cumul=6, boucle=3
cumul=10, boucle=4
cumul=15, boucle=5
cumul=21, boucle=6
cumul=28, boucle=7
cumul=36, boucle=8
cumul=45, boucle=9
cumul=55, boucle=10
Linux
I. II. III. IV. V. VI. VII. VIII. IX.
Programmation shell
10) Calculs et expressions

 Calculs avec bash

 Le bash propose une forme simple de calculs sur les entiers, en plaçant
l’opération entre $ ( ( . . . ) ) :

a=1
a=$((a+1))
echo $a
2
b=2
a=$((a*b))
echo $a
4

 Vous n’avez pas besoin de spécifier les $ des noms des variables entre les
doubles parenthèses.

let moyenne=$moyenne+$note

Vous aimerez peut-être aussi