Vous êtes sur la page 1sur 40

Script shell

Pr. ZAHRAOUI Issam


A.U: 2022-2023
Plan
❑ Introduction
❑ Environnements console
❑ Installer un nouveau shell
❑ Afficher et manipuler des variables
❑ Les opérations mathématiques
❑ Les variables des paramètres
❑ Instruction IF
Introduction

Un mini langage de programmation intégré à lunix, ce n'est pas un


langage aussi complet que peuvent l'etre le C, le C++ ou le java par
exemple, mais cela permet d'automatiser la plupart de vos taches :
sauvegarde des données, surveillance de la charge de votre machine,
etc.

3
Il existe plusieurs environnements console
sh : Bourne Shell.
➢ L'ancêtre de tous les shells.
bash : Bourne Again Shell.
➢ Une amélioration du Bourne Shell, disponible par défaut
sous Linux et Mac OS X.
ksh : Korn Shell.
➢ Un shell puissant assez présent sur les Unix propriétaires,
mais aussi disponible en version libre, compatible avec
bash.
csh : C Shell.
➢ Un shell utilisant une syntaxe proche du langage C.
tcsh : Tenex C Shell.
➢ Amélioration du C Shell.
zsh : Z Shell.
➢ Shell assez récent reprenant les meilleures idées de bash,
ksh et tcsh. 4
Installer un nouveau shell
Pour le moment, vous devriez avoir sh et bash installés sur votre système. Si vous voulez
essayer un autre shell, comme ksh par exemple, vous pouvez le télécharger comme n'importe
quel paquet :

# apt-get install ksh

Une fois installé, il faut demander à l'utiliser pour votre compte utilisateur. Pour cela, tapez :

$ chsh

5
Notre premier script
Créer un fichier vide :

$touch test.sh

Indiquer le nom du shell utilisé par le script

#!/bin/bash

6
Exemple
On va commencer par quelque chose de très simple : un ls.

#!/bin/bash
ls

Les commentaires

#!/bin/bash
# Affichage de la liste des fichiers
ls

Exécuter le script bash

$./test.sh
7
Afficher et manipuler des variables
➢ Les simples quotes ' '
Déclarer une variable

#!/bin/bash
message='bonjour tout le monde'

Afficher une variable


#!/bin/bash
message='bonjour tout le monde'
echo $message

8
Afficher et manipuler des variables
➢ Les doubles quotes " "
Afficher une variable par un message

#!/bin/bash
message='bonjour tout le monde'
echo "le message est : $mesage"

#!/bin/bash
message=‘pwd‘
echo "vous etes dans le dossier $message"

9
Afficher et manipuler des variables
read : demander une saisie

#!/bin/bash
read nom
echo "Bonjour $nom"

Affecter simultanément une valeur à plusieurs variables

#!/bin/bash
read nom prenom
echo "Bonjour $nom $prenom"

10
Afficher et manipuler des variables
-p : afficher un message de prompt

#!/bin/bash
Read -p 'Entrer votre nom :' nom
echo -e "\nBonjour $nom"

-n : limiter le nombre de caractères

#!/bin/bash
Read -p 'Entrer votre nom (6 caractères max) :' -n 6 nom
echo –e "\nBonjour $nom"

11
Afficher et manipuler des variables
-t : limiter le temps autorisé pour saisir un message

#!/bin/bash
read -p 'Entrer votre nom : ' -t 5 nom
echo -e "\nBonjour $nom"

-s : ne pas afficher le texte saisi

#!/bin/bash
read -p 'Entrez votre mot de passe : ' -s pass
echo -e "\nMerci ! Votre mot de passe est $pass ! :)"

12
Les opérations mathématiques
➢ Effectuer des opérations mathématiques

#!/bin/bash
Let a = 5
Let b = 2
Let c = a + b
echo $c

les opérations utilisables sont :


- l'addition : + ;
- la soustraction : - ;
- la multiplication : * ;
- la division : / ;
- la puissance : ** ;
- le modulo (renvoie le reste de la division entière) : %.
13
Les variables des paramètres
➢ des variables sont automatiquement créées :

$# : contient le nombre de paramètres ;


$0 : contient le nom du script exécuté (ici ./test.sh);
$1 : contient le premier paramètre ;
$2 : contient le second paramètre ;
, ;
$9 : contient le 9e paramètre ;
Exemple

#!/bin/bash
echo "Vous avez lancé $0, il y a $# paramètres"
echo "Le paramètre 1 est $1"

14
L’instruction if

➢ Les différents types de tests

Il est possible d’effectuer trois types de tests différents en bash :

• Des tests sur des nombres

• Des tests sur des chaines de caractères

• Des tests sur des fichiers.

15
L’instruction If
Syntaxe:

SI (condition) #!/bin/bash
ALORS if [condition]
instruction then
FIN SI instruction
fi

16
L’instruction if
➢ Tests sur des nombres "eq" : égal à (Equal)
"ne" : différents (Not Equal)
"lt" : plus petit que (Less Than)
"gt" : plus grand que (Greater Than)
"ge" : plus grand ou égal (Greater than or Equal to)
"le" : plus petit ou égal (Less than or Equal to)

17
L’instruction if
Syntaxe:

Exemple1: #!/bin/bash Exemple2:


if [ $# -eq 2 ]
#!/bin/bash then
Read –p ‘Donner la valeur de A:’ A if [ $1 -ge $2 ]
Read –p ‘Donner la valeur de B:’ B then
if [ $A -ge $B ] echo " Le plus petit nombre est :&1 "
then else
echo " Le plus petit nombre est :&B " echo " Le plus petit nombre est :&2 "
else fi
echo " Le plus petit nombre est :&A " else
fi echo " Le nombre des arguments doit etre
fi

18
L’instruction if
➢ Tests sur des chaînes de caractères

Exemple 1 :

#!/bin/bash
if [ $1 != $2 ]
then
echo "Les 2 paramètres sont différents !"
else
echo "Les 2 paramètres sont identiques!"
fi 19
L’instruction If
Exemple 1 : Tests sur des chaines de caractère

#!/bin/bash
nom= "Rachid"
if [ $nom = "Rachid" ]
then
echo "Salut Rachid !"
fi

20
L’instruction If
Exemple 2 :
#!/bin/bash
nom1="Rachid"
Nom2="Oussama"
if [$nom1=$nom2]
then
echo "Ces deux nom sont identiqus"
else
echo "Ces deux nom ne sont pas identiqus "
fi

#!/bin/bash
nom1="Rachid"
Read -p 'Entrer votre nom :' nom
if [ $nom = $nom1 ]
then
echo "bienvenu $nom"
else
echo "desolé $nom je ne te connais pas"
fi 21
L’instruction if
➢ Tests sur les fichiers

22
L’instruction if
➢ Tests sur les fichiers
Exemple :

#!/bin/bash
read -p 'Entrez le nom du fichier : ' fichier
if [ -e $fichier ]
then
echo " le fichier $fichier dans le dossier courant"
else
echo "Le fichier n’existe pas"
fi

23
En résumé
• On effectue des tests dans ses programmes grâce aux if, then, [[ elif, then, fi] else,] fi.
• On peut comparer deux chaînes de caractères entre elles, mais aussi des nombres. On
peut également effectuer des tests sur des fichiers : est-ce que celui-ci existe ? Est-il
exécutable ? Etc.
• Au besoin, il est possible de combiner plusieurs tests à la fois avec les symboles&&(ET)
et||(OU).
• Le symbole!(point d'exclamation) exprime la négation dans une condition.
• Lorsque l'on effectue beaucoup de tests sur une même variable, il est parfois plus
pratique d'utiliser un bloc case in… esac plutôt qu'un bloc if… fi.

24
Les Boucles
➢ while : boucler « tant que »
Syntaxe:

TANT QUE test while [ test ]


FAIRE ------> effectuer_une_action do
RECOMMENCER echo 'Action en boucle'
done

25
Les Boucles
Exemple:

#!/bin/bash
i=1
While [ $i –le 10 ]
Do
Echo “la valeur du variable :$i”
Let “i=$i+1”
done

26
Les Boucles
➢ for : boucler sur une liste de valeurs
Syntaxe:

#!/bin/bash
POUR variable PRENANT valeur1 valeur2 for variable in 'valeur1' 'valeur2'
FAIRE ------> effectuer_une_action do
VALEUR_SUIVANTE echo "La variable vaut $variable"
done

27
Les Boucles
Exemple 1:

#!/bin/bash
for nom in 'Ahmed' 'Kamal' 'Youne'
do
echo "Bonjour : $nom"
done

Exemple 2:

#!/bin/bash
for i in `seq 1 10`;
do
echo $i
done 28
TP: Programmation Shell
Exercice 1 : Ecrire un programme qui permet de comparer deux paramètres en arguments et d'afficher le
plus petit nombre.
N.B : le programme doit tester le nombre des arguments, si le nombre des arguments n‘égale pas 2 le
programme affiche le message suivant :
--- >le nombre des arguments doit être 2
Exercice 2 :
Ecrire un script shell qui prend 3 nombres ne arguments et affiche le plus petit de ces nombre, si le
nombre d’argument n’est pas correcte un message d’erreur d’affiche.
Exemple 1 : ./test 4 8 5
Le plus petit entre 4, 8 et 5 est 4
Exemple 2 : ./test 4 9
Erreur ! Le nombre d’argument n’est pas correct
29
TP: Programmation Shell

Exercice 3 : Écrire un programme shell qui affiche les arguments du programme, dans
l'ordre d'apparition (1er argument en premier). Si le programme n'a aucun argument,
afficher « sans argument ».
Indication : Utilisez la commande shift.
Exercice 4 : Écrire un programme shell qui affiche tous les sous-répertoires du répertoire
courant, en utilisant une boucle.
Exercice 5 : Écrire un programme shell qui affiche ligne par ligne le contenu d'un fichier
dont le nom est fourni en paramètre.
TP: Programmation Shell
Exercice 4 : Écrire un programme shell qui affiche tous les sous-répertoires du répertoire
courant, en utilisant une boucle.

Solution

#!/bin/sh
for rep in *; do # pour chaque fichier "rep" du repertoire courant
if [ -d "$rep" ]; then # si rep est un repertoire
echo $rep # affiche rep
fi
done
TP: Programmation Shell

Exercice 6 : Créer un script qui demande à l'utilisateur de saisir une note et qui affiche un
message en fonction de cette note :
« très bien » si la note est entre 16 et 20 ;
« bien » lorsqu'elle est entre 14 et 16 ;
« assez bien » si la note est entre 12 et 14 ;
« moyen » si la note est entre 10 et 12 ;
« insuffisant » si la note est inférieur à 10.

Reprenez l'exercice 6 et faites en sorte que le programme se répète tant que l'utilisateur n'a
pas saisi une note négative ou 'q' (pour quitter).

Le script doit calculer le nombre de notes de saisies et en faire la moyenne tout à la fin.
Fonction
Une fonction permet de regrouper des instructions fréquemment employées dans un ensemble identifié par un
nom. Ce nom, utilisé ensuite dans le script comme toute autre commande Unix, exécutera l'ensemble des
instructions contenues dans la fonction. Une fois le corps de la fonction créé, il n'y a aucune différence entre «
appeler une fonction » et « appeler une commande Unix ». Leur nom est soumis aux mêmes impératifs que les
noms de variables : une suite de caractères commençant impérativement par une lettre ou le caractère « _ »
(souligné ou « underscore ») et comportant ensuite des lettres, des chiffres ou le caractère souligné.

Syntaxe :
nom_de_fonction()
{
commande1
[ commande2 ?]
}
#?
nom_de_fonction
Fonction
Exemple 2
Une fonction qui affiche si la valeur qu'elle reçoit est paire ou impaire :

#!/bin/sh
# Fonction qui affiche la parité d'une valeur
Exemple 1 : pair_impair()
{
function newls test `expr $1 % 2` -eq 0 && echo "$1 est pair" || echo "$1 est impair"
{ }
date # Affichage de la
date # Pour chaque nombre passé au programme
ls -l # Affichage du ls for nb in $*
} do
# Vérification de la parité de ce nombre
pair_impair $nb
done
TP: Programmation Shell
Exercice 7 : Créer un script qui prend un nombre en saisie et l'élève à sa propre puissance.
C'est un peu le même principe que la factorielle mais cette fois, l'usage de la boucle for est
imposé.
Exemple d'exécution :

[ ~] ./NomDuScript.sh
Saisir une valeur :
2
2^2 = 4
Exercice 8 : Créer un script qui vous propose le menu suivant :
1 - Vérifier l'existence d'un utilisateur
2 - Connaître l'UID d'un utilisateur
q – Quitter
L'utilisateur devra être saisi, à l'aide d'une fonction. Son existence devra être vérifiée à l'aide
d'une autre fonction.
Les tableaux
Pour définir un tableau, on peut faire comme ceci :

Tableau=('valeur0' 'valeur1' 'valeur2')

Pour accéder à une case du tableau, il faut utiliser la syntaxe suivante :

${tableau[2]}

Vous pouvez aussi définir manuellement le contenu d'une case :

Tableau[2]='valeur2'

15
Les tableaux
Exemple

#!/bin/bash
tableau=('valeur0' 'valeur1' 'valeur2')
tableau[2]='valeur2'
echo ${tableau[2]}
Vous pouvez afficher l'ensemble du contenu du tableau d'un seul coup en utilisant
${tableau[*]}
Exemple

#!/bin/bash
tableau=('valeur0' 'valeur1' 'valeur2')
tableau[2]='valeur2'
echo ${tableau[*]}
16
#!/bin/bash
if [ $# -eq 2 ]
then
if [ $1 -ge $2 ]
then
echo " Le plus petit nombre est :&1 "
else
echo " Le plus petit nombre est :&2 "
fi
else
echo " Le nombre des arguments doit etre 2 "
fi
#!/bin/bash
If [ $# -eq 3 ]
Then
if [ $1 -ge $2 ]
then
if [ $2 -ge $3 ]
then
echo "le plus petit entre $1 $2 et $3 est :$2"
else
echo "le plus petit entre $1 $2 et $3 est :$3"
fi
else
if [ $1 -ge $3 ]
then
echo "le plus petit entre $1 $2 et $3 est :$3"
else
echo "le plus petit entre $1 $2 et $3 est :$1"
fi
fi
else
echo "erreur le nombre des arguments est incorrect"
fi
#!/bin/bash
If [ $# -eq 3 ]
Then
If [ [$1 –gt &2 && $1 –gt $3]]
echo "le plus grand entre $1 $2 et $3 est :$1 "
fi
If [ [$ 2 –gt $ 1 && $ 2 –gt $ 3]]
echo "le plus grand entre $1 $2 et $3 est :$2 "
fi
If [ [$ 3 –gt $ 1 && $ 3 –gt $ 2]]
echo "le plus grand entre $1 $2 et $3 est :$3 "
fi
else
echo "erreur le nombre des arguments est incorrect"
fi

Vous aimerez peut-être aussi