Chapitre 5: Scripts Shell
Chapitre 5:
Scripts Shell
Chapitre 5: Scripts Shell
Introduction
Un script Shell est un ensemble de commandes
répertoriées dans un fichier et ayant éventuellement des
paramètres. Le nom de la commande correspond au nom du
fichier.
Les paramètres sont des chaînes de caractères identifiées
par leur position sur la ligne de commande.
➢ La liste des Shells disponibles sur votre machine :
$ cat /etc/shells
Chapitre 5: Scripts Shell
Variables prédéfinies
Les variables suivantes sont prédéfinies dans les scripts Shell
:
➢ $* : listes des paramètres ; echo $* affiche la liste des paramètres
➢ $0, $1, $2, etc. : contiennent successivement : le nom du script,
valeur du premier argument ,valeur de deuxième argument
…etc.
➢ $# : variable contenant le nombre de paramètres ;
➢ $$ : numéro du processus courant ; pour l’afficher echo $$
➢ $!: numéro du dernier processus en arrière plan
➢ $?: valeur du code de retour de la dernière commande
exécutée.
Chapitre 5: Scripts Shell
Première ligne de votre Script(Shebang)
La première ligne du script commence toujours par
"#!" suivi du chemin vers l'interpréteur de script, par
exemple sh, bash, etc.
Cette séquence de caractères "#!" est appelée Shebang.
Elle sert à indiquer au système quel interpréteur de script il
doit utiliser pour exécuter le code contenu dans le fichier.
Syntaxe de Shebang:
#!<chemen vers l’interpréteur>
Exemple:
#!/bin/sh
Chapitre 5: Scripts Shell
Exemples:
1. le nom du script est sc1
# !/bin/sh
echo –n ‘Bonjour on est le ’
date +"%y/%m/%d"
Pour exécuter le script tapez: sh sc1
ou lui donner le droit d’exécution en utilisant la
commande chmod:
chmod +x sc1 ou chmod u+x sc1
et pour son exécution tapez : ./sc1
Chapitre 5: Scripts Shell
Exemples:
2. le nom du script est sc2
Le script suivant illustre l'utilisation des variables
prédéfinies :
#!/bin/sh
echo 'nom du script :' $0
echo 'argument 1 :' $1
echo 'argument 2 :' $2
echo 'argument 3 :' $3
echo "nombre d'arguments :" $#
echo "tous les arguments:" $*
Chapitre 5: Scripts Shell
Exemple d'utilisation du script sc2:
$ sh sc2 aa bb cc
nom du script : sc2
argument 1 : aa
argument 2 : bb
argument 3 : cc
nombre d'arguments : 3
tous les arguments: aa bb cc
Chapitre 5: Scripts Shell
Structures conditionnelles
Chapitre 5: Scripts Shell
Structure conditionnelle simple
L'instruction if permet d'exécuter des instructions si une
certaine condition est vraie. Sa syntaxe est la suivante :
if [ condition(s) ]
then
action
fi
Rq: L'indentation n'est pas obligatoire mais très
fortement recommandée pour la lisibilité du code.
Chapitre 5: Scripts Shell
Structure conditionnelle complète
Syntaxe:
Exemple:
if [ condition ] if [ $# -eq 1 ]
then
then
echo "Le répertoire $1 a le contenu suivant : "
action1 ls $1
else else
echo 'Mauvais nombre de paramètres'
action2
fi
fi
Chapitre 5: Scripts Shell
Structures conditionnelles imbriquées
if [ condition1 ]
then Exemple:
action1
elif [ condition2 ] if [ $# -eq 1 ]
then
then echo "Le script a un seul paramètre "
action2 elif [ $# -eq 2 ]
elif [ condition3 ] then
then echo "Le script a deux paramètres "
action3 elif [ $# -ge 3 ]
then
else echo "Le script a trois paramètres ou
action4 plus "
fi fi
Chapitre 5: Scripts Shell
Opérateurs sur des fichiers
Le Shell étant souvent utilisé pour manipuler des fichiers, il offre
plusieurs opérateurs permettant de vérifier diverses conditions sur
ceux-ci :
➢Existence, dates, droits.
➢D'autres opérateurs permettent de tester des valeurs,
chaînes ou numériques.
Chapitre 5: Scripts Shell
Opérateurs sur des fichiers
Opérateur Description Exemple
-e fichier vrai si fichier existe if [ -e /etc/shadow ]
-d fichier vrai si fichier est un if [ -d /home/tp2 ]
répertoire
-f fichier vrai si fichier est un if [ -f bonjour.c ]
fichier ordinaire
-L fichier vrai si fichier est un lien if [ -L /home ]
symbolique
-r fichier vrai si fichier est lisible (r) if [ -r /home/ ]
-w fichier vrai si fichier est if [ -w /home/user2 ]
modifiable (w)
-x fichier vrai si fichier est if [ -x /home/user2 ]
exécutable (x)
Chapitre 5: Scripts Shell
Opérateurs de comparaison des nombres
Opérateur Description Exemple
num1 -eq num2 égalité (equal) if [ $nombre -eq 27 ]
num1 -ne num2 inégalité (not equal) if [ $nombre -ne 27 ]
num1 -lt num2 inférieur ( < less than) if [ $nombre -lt 27 ]
num1 -le num2 inférieur ou égal ( less or if [ $nombre -le 27 ]
equal )
num1 -gt num2 supérieur ( > greater than if [ $nombre -gt 27 ]
)
num1 -ge num2 supérieur ou égal ( if [ $nombre -ge 27 ]
greater or equal)
Chapitre 5: Scripts Shell
Opérateurs sur les chaînes de caractères
Opérateur Description Exemple
-z chaine vrai si la chaine est vide if [ -z $VAR ]
-n chaine vrai si la chaine est non if [ -n $VAR ]
vide
chaine1 = chaine2 vrai si les deux chaînes if [ $VAR = "ENSAT" ]
sont égales
chaine1 != chaine2 vrai si les deux chaînes if [ $VAR != "GI" ]
sont différentes
Remarque: Il est nécessaire d'entourer les variables de guillemets (") dans les
comparaisons.
if [ $var = " ENSA de Tétouan" ]
then
echo "OK"
fi
Chapitre 5: Scripts Shell
Exemple1 :
#!/bin/sh
if [ -f $1 ] ; then
echo " $1 est un fichier «
elif [ -d $1 ] ; then
echo " $1 est repertoire "
else
echo ‘’on sait pas trop sur $1 " ; exit 1
fi
Chapitre 5: Scripts Shell
Exemple2 :
#!/bin/sh
if [ $# -ne 1 ] ; then
echo " un seul paramètre est autorisé " ; exit 1
fi
Exemple3 :
#!/bin/sh
if [ ! –d $1 ] ; then
echo " $1 n’est pas un répertoire " ; exit 1
fi
Chapitre 5: Scripts Shell
Exercices
1)Ecrire un script Shell qui permet d’afficher le contenu
de 3 fichiers passés en paramètres s’ils ont le droit de
lecture.
2)Ecrire un script Shell qui compte le nombre de fichiers
ordinaires et de répertoires dans votre répertoire
courant.
3) Ecrire un script qui permet de compiler et d’exécuter
le programme C passé en paramètres.
Chapitre 5: Scripts Shell
1)
Chapitre 5: Scripts Shell
Exemple:
un script Shell qui compte le nombre de fichiers
ordinaires et de répertoires dans votre répertoire
courant.
Chapitre 5: Scripts Shell
3)
Chapitre 5: Scripts Shell
Choix multiple
L'instruction case permet de choisir une suite
d'instruction suivant la valeur d'une expression :
case "$x" in
Mon) echo "Lundi" ;;
Tue) echo "Mardi " ;;
…
*) echo "entrer un choix valable'‘;;
esac
Noter les deux ;; pour signaler la fin de chaque séquence
d'instructions.
Chapitre 5: Scripts Shell
Exemple:
#!/bin/sh
case $# in
0) echo " $0 sans argument" ;;
1) echo " $0 possède un argument" ;;
2) echo " $0 possède deux arguments" ;;
*) echo " $0 possède plus de deux arguments" ;;
esac
Chapitre 5: Scripts Shell
Exercice
Ecrire un script qui affiche le menu suivant :
Pour lister les fichiers Tapez 1
Pour lister les répertoires Tapez 2
Pour afficher les droits d’accès du répertoire courant
Tapez 3
Pour quitter Tapez 4
Entrez votre choix: 3
Vous avez choisi d’afficher les droits du rép. courant
Chapitre 5: Scripts Shell
Correction
Chapitre 5: Scripts Shell
Opérations sur des nombres
La commande expr offre la possibilité d’effectuer des
opérations arithmétiques sur des variables contenant des
nombres :
Exemple:
N1=1
N2=3
N3=$( expr $N1 + $N2 )
echo la somme est $N3
N.B : par défaut les variables sont des chaînes de
caractères
Chapitre 5: Scripts Shell
Opérations sur des nombres
Exemple 2 :
N1=1
N2=3
N3=$(( $N1 + $N2 ))
echo ‘la somme est’ $N3
Chapitre 5: Scripts Shell
Structures Répétitives
(Boucles)
Chapitre 5: Scripts Shell
Boucle for
Comme dans d'autres langages, la boucle for permet
d'exécuter une suite d'instructions avec une variable
parcourant la suite de valeurs.
Exemple :
for i in 2022 2023 2024
do
echo ‘calendrier de $i’
cal $i
done
affichera le calendrier de chaque année
Chapitre 5: Scripts Shell
Boucle for
On utilise fréquemment for pour énumérer des noms de
fichiers, comme dans cet exemple :
for fi in /etc/rc*
do
if [ -d $fi ]
then
echo "$fi (repertoire)"
else
echo "$fi (fichier) "
fi
done
Chapitre 5: Scripts Shell
Boucle for
Ou encore, pour traiter les arguments passés sur la ligne
de commande :
#!/bin/sh
for arg in $*
do
echo $arg
done
Chapitre 5: Scripts Shell
Boucle for
Il est aussi possible de parcourir des valeurs itératives
comme dans la plupart des langages de programmation à
l'aide de la boucle for. Pour cela, on peut utiliser la
commande seq comme suit :
Résultat du script:
Chapitre 5: Scripts Shell
Exercices
1) Ecrire un script Shell qui affiche le contenu de tous les
fichiers passés en paramètres.
2) Ecrire un script Shell, ayant n fichiers en paramètres,
qui donne le droit de lecture à ceux qui ne l’ont pas.
3) Ecrire un script Shell qui permet de modifier les
droits d’accès de tous les fichiers en 551 et de tous les
dossiers en 700 se trouvant dans le répertoire courant.
Chapitre 5: Scripts Shell
Correction
1)
Chapitre 5: Scripts Shell
Correction
2
Chapitre 5: Scripts Shell
Correction
3
Chapitre 5: Scripts Shell
Boucle while
➢ Syntaxe:
while [ Condition(s) ]
do
commandes
done
➢ Exemple:
n=5 ; i=1
while [ $i –lt $n ] ; do
echo $i
i=$(( $i +1 ))
done
Chapitre 5: Scripts Shell
Boucle while
➢ Opérateurs Logiques:
-o : le OU logique ;
-a : le ET logique
➢ Exemple 2:
while echo –n " votre choix (1,2,3 ou 4) ?"
read choix
[ $choix –lt 1 –o $choix –gt 4 ] ; do
echo "\n Une valeur entre 1 et 4 svp !"
done
exit $choix
Chapitre 5: Scripts Shell
Boucle until-do
➢ Syntaxe de répéter :
until ….. do
done
➢ Exemple :
choix=0
until [ $choix –ge 1 –a $choix –le 4 ] ; do
echo –n " votre choix (1,2,3 ou 4) ? "
read choix
done
echo ‘’ bon choix’’
Chapitre 5: Scripts Shell
Exercices
➢ Ecrire un script Shell ayant deux paramètres un
nombre de départ et un nombre d’arrivée et qui affiche
tous les nombres compris entre ces deux valeurs.
➢ Ecrire un script Shell, ayant un fichier et deux nombres
l1 et l2 en paramètres ,qui affiche les lignes comprises
entre l1 et l2. ( avec l2>=l1)
Chapitre 5: Scripts Shell
Correction
1)
Chapitre 5: Scripts Shell
2)