Vous êtes sur la page 1sur 16

UNIVERSITE HASSAN II DE CASABLANCA

FACULTE DES SCIENCES Ben M’sik


Département de Mathématique et
Informatique

Système d’exploitation 2
Polycopié de TP
Linux : Script Shell

Filière SMI / S4

Année universitaire 2023/2024

1
Université Hassan II
de Casablanca
Faculté Des Sciences Ben M’Sik

Département de Mathématiques et Informatique

Rappel sur les commandes de base


Manipulation des fichiers et des répertoires :
pwd affiche le répertoire courant
cd rep se place dans le répertoire rep
cd se place dans le répertoire de l'utilisateur ~/
cd .. se place dans le répertoire parent
ls rep liste les fichiers du répertoire rep
ls -a ls avec les fichiers cachés
ls -l ls avec les droits d'accès et la taille
mv source cible déplace le fichier source vers cible
cp source cible copie le fichier source vers cible
cp -R source cible copie le répertoire source vers cible
ln source lien créer un lien fort de source vers lien
ln -s source lien créer un lien symbolique de source vers lien
touch file créer le fichier file ou met à jour sa date de
mkdir rep créer un répertoire rep
mkdir -p rep/rep2 mkdir avec création du rep parent si nécessaire
rm file supprime le fichier file
rm -rf supprime le fichier ou rép protégé en écriture
rmdir rep supprimer un répertoire vide
rm -r rep supprime un répertoire
du -h file ou rep affiche la taille de file ou du répertoire rep

Manipulation du contenu des fichiers


wc fichier compte le nombre de lignes, de mots, d'octets de fichier
cat fichiers concatène les fichiers
more fichier affiche fichier page après page 'Espace'=page suivante, 'Entrée'=ligne suivante,
'u'=remonter
less fichier affiche *fichier* avec une navigation au clavier
head -n x fichier affiche les x premières lignes de fichier
tail -n x fichier affiche les x dernières lignes de fichier
tail -f fichier affiche la dernière ligne de fichier en temps réel
diff file1 file2 affiche les différences entre deux fichiers texte
diff -u file1 file2 affiche les différences au format patch
comp file1 file2 compare deux fichiers binaires
comp file1 file2 n N compare deux fichiers, file1 à partir du nième octet, et *file2* à partir du
**N**ième

Utilisateurs
whoami affiche le login de l'utilisateur
who affiche les utilisateurs connectés
id afficher les uid, gid et groupes de l'utilisateur
id user afficher les uid, gid et groupes de user (root only)

2
finger user affiche les informations de user
write user afficher un message sur le terminal de user
tty afficher le nom de son terminal
su - sudo passer en mode administrateur, super-utilisateur
passwd changer le mot de passe de l'utilisateur courant
adduser ajouter un utilisateur
deluser supprime un utilisateur
addgroup ajoute un groupe
delgroup supprime un groupe

Recherche
locate motif recherche sur un nom correspond au motif
updatedb mettre à jour la base de données de locate
find chemin options recherche les fichiers dans chemin avec option
find -name motif recherche sur le nom du fichier
find -type f/d/l recherche par type où f=fichier,d=répertoire,l=lien
find -exec cmd exécute la commande cmd à tous les fichiers trouvés

3
Série de révision : Commandes de base

Exercice 1
1. Créez un répertoire test/.
2. Déplacez fich1 dans test/.
3. Faites une copie de fich2 appelée copie, et placez-la également dans test/.
4. Affichez une liste de ce que contient test/.
5. Détruisez test/.
6. Vous avez chez vous des fichiers appelés 4 fichiers appelés fich1, fich2, fich3 et fich4.
Comment les effacer en une seule ligne de commande ?
7. Comment mettre dans un fichier la liste de tous les fichiers de l'arborescence à partir du
répertoire courant ?
8 . Créez un fichier liste contenant la liste de tous vos fichiers, avec leur taille, leurs droits, etc
9. Comment afficher uniquement les fichiers du répertoire courant qui sont des liens
symboliques ?
10. Combien de lignes contiennent le mot «file» dans la page de man de less ?

Exercice 2 (find) (Dans votre home )


1. Chercher les fichiers qui ont été modifiés-ils y a plus de 30 jours ? Il y a 30 jours ? Il y a
moins de 30 jours?
2. Chercher les fichiers qui ont été modifié plus récemment qu'un autre fichier donné ?
3. Chercher les répertoires ?
4. Utiliser find pour effacer tous vos fichiers de sauvegarde (terminés par un tilde) qui ont plus
d'un mois. (utiliser exec rm avec find)
5. Lister tous les fichiers dont les noms commence par un ‘a’ majuscule ou minuscule
6. Lister tous les fichiers ayant une extension .txt et ayant été modifiés plus récemment que le
fichier a.txt.
7. Lister tous les fichiers ayant une taille supérieure à 10 octets=80bitspuis à 10 Ko=80Kilobit
Exercice N° 3:
Copiez le fichier /etc/passwd dans votre home directory.

1. Editez uniquement les champs contenant le login et la home directory.

4
2. Triez passwd par le nom
3. Extraire les noms de login et UID puis triez suivant les UID, le tout en une seule commande,
vous redirigerez le tout vers un fichier
4. Dans le fichier de résultat précédent remplacer les ":" par des " " (espace).
5. Editez les cinq dernières lignes du fichier.
6. Editez la ligne commençant par votre nom de login.
7. Dans le fichier passwd, éditez les lignes commençant par des noms de login ne contenant
pas de chiffre.
8. Comment obtenir un fichier fich3 qui corresponde au fichier /etc/passwd sans utiliser cp ni
ouvrir d'éditeur de texte ?
9. Quelle est la taille de /etc/passwd
10. Compter le nombre de caractère de ce fichier (/etc/passwd)

Exercice N° 4 : Gestion des droits d'accès: chmod


Connectez-vous au système comme un des utilisateurs créé précédemment. Créer un
fichier vide dans votre répertoire de connexion nommé le (fichier).
1. Quels sont les droits des autres sur ce fichier ?
2. Modifier les droits sur (fichier) de sorte à permette au groupe de le lire et le modifier.
Les autres utilisateurs n'ont aucun droit. (essayer les deux versions des commandes :
masque octal et notation symbolique).
3. Appliquer les séries des commandes suivantes et noter la différence :
Série 1) chmod 200 fichier ; chmod u=r fichier
Série 2) chmod 200 fichier ; chmod u+r fichier
Série 3) chmod 220 fichier ; chmod u=r fichier
4. Remplacez la liste de commandes suivantes par une commande unique ayant le même
résultat. chmod 653 fic chmod u-r,g+w,o-r fic
5. Donner au propriétaire le droits de lire et écrire le fichier, au groupe le droit de lire et
l'exécuter et aux autres le droit de l'exécuter.

5
Les scripts shell : Résumé

C’est quoi le Shell ?:


C’est un langage qui fait l’intermédiaire entre les systèmes d’exploitation Unix et les
utilisateurs. C’est le programme qui lit et interprète les commandes que vous tapez au terminal

Création d’un script


• Ouvrez le terminal et tapez : $ nano nom_de_script.sh
• Ecrivez le contenu de votre fichier script.

Le contenu du fichier Script


• Si vous utilisez bash, débutez votre fichier avec : # !/bin/bash

Les commentaires:
• Tous les commentaires commencent par un # :
L’exécution
• D’abord On donne le droit d’exécution à notre fichier script : $chmod +x mon_script.sh
• Ensuite, on l’exécute en tapant <<./>> devant le nom de script : $ ./nom_script

Les variables :
• Les variables dans le Shell n’ont pas besoin d’être déclarées, pour affecter une valeur à une
variable on met : Nom_variable = valeur
• Pour utiliser une variable, on la précède par le signe $, comme ça le Shell va l’interpréter
comme étant une variable : $nom_variable

Les commandes echo et read :


Il existe deux principales commandes de Shell à savoir :
Echo : c’est une commande qui affiche dans la console un message et/ou le contenu d’une
variable
$echo ‘’salut tout le monde ‘’

Read : Cette commande permet de stocker une valeur (chiffre / chaine de caractère) saisie par
l’utilisateur dans une variable.
echo ‘’Entrer votre nom’’
read nom
La commandes test
Beaucoup des utilitaires de Unix ont un exit-status qui est égal à 0 si la commande s’est bien
terminée et différent de 0 sinon.

6
▪La commande test, qui n’a d’utilité qu’à l’intérieur de shell-scripts, ne donne rien d’autre qu’un
tel exit-status. Naturellement, cette commande est utilisée pour diriger le flux de contrôle du
shell-script.
Par exemple :
test -f nom-de-fichier donne la valeur 0 (vrai) si nom-de-fichier est un fichier qui existe et
n’est pas un catalogue.

Voici la liste presque complète des arguments possibles pour test :


test -f fichier vrai si fichier existe et n’est pas un catalogue;
test -r fichier vrai si fichier existe et est accessible en lecture;
test -w fichier vrai si fichier existe et est accessible en écriture;
test -d fichier vrai si fichier existe et est un catalogue;
test chaîne vrai si chaîne est une chaîne de caractères non vide;
test -n chaîne même chose que “test chaîne ”;
test -z chaîne vrai si chaîne est une chaîne de caractères vide
test chaîne 1 = chaîne2 vrai si la chaîne de caractères chaîne 1 est identique à la chaîne de
caractères chaîne2
test chaîne 1 != chaîne 2 vrai si la chaîne de caractères chaîne1 est différente de la chaîne
de caractères chaîne2
test n1 -eq n2 vrai si le nombre n1 est égal au nombre n2
test n1 -ne n2 vrai si le nombre n1 est différent du nombre n2
test n1 -gt n2 vrai si le nombre n1 est supérieur au nombre n2
test n1 -ge n2 vrai si le nombre n1 est supérieur ou égal au nombre n2
test n1 -lt n2 vrai si le nombre n1 est inférieur au nombre n2
test n1 -le n2 vrai si le nombre n1 est inférieur ou égal au nombre n2
Remarque : “!” est l’opérateur logique non, “-a” est l’opérateur logique binaire et et “-o” est
l’opérateur logique binaire ou.

Les structures de contrôle :

• If : la syntaxe en sh est la suivante

If cmd
Then instruction ;
fi
• if...else : si vous voulez faire quelques choses de particulier si la condition n’est pas
remplie
if cmd
then
instructions ;
else
instruction ;
fi

7
• Case : permet de vérifier le contenu d’une même variable ou d’un résultat de manière
multiple

Case valeur in
Exp1)
Commande ;;
Exr2)
Commande ;;

*)
Commande ;;
esac
Les boucles :
• for :
La boucle for permet de parcourir une liste de valeurs et de boucler autant de fois qu'il y a
de valeurs

for variable in ‘valeurs’


Do
Commandes
Done
La boucle for peut être exécutée de différentes manières :
Par défaut à l'aide de la commande seq
for var for i in `seq 1 10`;
do do
commande echo $i
done done
Liste de valeurs citée directement Liste de valeurs contenue dans une variable
for var in valeur1 valeur2 valeur3 ... for var in $variable
do do
commande commande
done done
Liste de valeurs générée par substitution de Liste de valeurs générée par substitution de
commande caractères de génération de noms de fichiers
for var in `commande` for var in *.ext
do do
commande commande
done done
Avec incrémentation
for (( var=valeurMin; var<=valeurMax; var++ ))
do
commande
done
• While :
While : La boucle while exécute les commandes de manière répétée tant que la première
commande réussite ou satisfaite.
while condition
do commandes
done

8
Les scripts shell bash
TP 2
Manipulation 1 : Variables d’environnements
1. Créez une variable d’environnement DIST ayant pour valeur ubuntu.
2. Dans le même terminal, lancez un nouveau shell puis affichez la valeur de la variable
DIST dans ce nouveau shell. Que se passe-t-il ?
Le nouveau shell ne connaît pas la variable créée dans le shell précédent
3. Quittez le sous-shell (Ctrl+D) et affichez la valeur de la variable DIST. Exécutez la
commande export DIST puis refaites la question précédente.
4. Regardez le contenu de la variable PATH. Comment peut-on ajouter un répertoire à cette
liste ?
Manipulation 2 : mon premier script
Un script est un fichier texte standard pouvant être créer par n’importe quel éditeur, il
commence par une ligne de commentaire contenant le nom du langage à utiliser pour interpréter
ce script, pour le cas qui nous intéresse : /bin/sh.
Un script élémentaire pourrait être :
#!/bin/sh
echo "Bonjour tout le Monde !"
1. Écrire ce script et enregistrer le sous le nom : mon_script
2. Exécuter ce script (d’abord On donne le droit d’exécution à notre fichier script : $chmod
+x mon_script.sh, ensuite, on l’exécute en tapant <<./>> devant le nom de script : $
./nom_script)
Manipulation 3 : Variables Utilisateurs
Nous travaillons toujours sur le même script « mon_script ». Ce script est statique, pour
modifier son comportement en "passant" un (ou plusieurs) paramètre(s) au script.
1. Modifier ce script pour qu’il vous affiche « bonjour Nom » avec nom est entrée au
clavier comme paramètre du script
#!/bin/sh
echo Bonjour $1
Les variables $1, $2 ... $9 contiennent les "mots" numéro 1, 2 ... 9 de la ligne de commande.
Attention : par "mot" on entend ensemble de caractères ne contenant pas de caractères de
séparations (l’espace, la tabulation, le point-virgule).

9
• La variable * (dont le contenu est $*) contient l’ensemble de tous les "mots" qui on été
passé au script.
• La variable # contient le nombre de paramètres qui ont été passés au programme.
• La variable 0 (zéro) contient le nom du script (ou du lien si le script a été appelé depuis
un lien).
Le passage des paramètres nous à montrer l’utilisation de "nom" particuliers : $1, $2 etc. ce
sont les substitutions des variables 1, 2 et c. par leur valeurs. Mais vous pouvez définir et utiliser
n’importe quel nom. (Remarque : une variable peut être par exemple nom, son contenu est
$nom)
2. Ecrire un programme shell « deuxfois » qui demande à l’utilisateur d’entrer un mot et
affiche ensuite se mots deux fois sur la même ligne (utilisez la commande read).
3. Ecrire un programme shell qui demande cette fois à l’utilisateur de saisir une suite
d’au moins trois mots et qui affiche ensuite : le nombre de mots entrés ainsi que tous
les mots entrés. Modifier ce script pour qu’il n’affiche que le premier et le troisième
mot saisi (Utilisez les commandes read et set) ;
4. Expliquer l’objectif de la commande suivante : $ declare ‐r mess=bonjour
Exercice 4 : Arithmétique
Soit le script suivant :
# !/ bin / bash
nombre =7 # affectation simple
nombre =$( $nombre +10)
echo $nombre

1. Expliquez pourquoi ce script affiche “7+10” sur l’écran au lieu de “17”.


2. Corrigez ce script pour que le résultat de l’évaluation de l’expression arithmétique
soit correct.
Exercice 5 :
Ecrire un script qui prend deux entiers positives en arguments et affiche le max et le min.
Vérifiez que le nombre de paramètres est correct.

10
Les scripts shell bash
TP 3

Ecrire 1
Ecrire un Shell script qui prend un nom de fichier en entrée (au clavier), et répond s'il peut être
lu, écrit, ou exécuté.

Exercice 2 :
Écrire un script qui prend en argument le nom d’un fichier et deux nombre entier et affiche sur
la sortie standard les lignes de ce fichier comprises entre ces deux nombres.

Exercice 3
Ecrire un script Shell appel existe qui vérifier si un utilisateur existe ou pas.(penser à
/etc/passwd

Exercice 4 : Calculatrice
Écrire un script bash appelé Calculatrice prenant en argument un nombre, demandant une
deuxième valeur, puis une opération à effectuer parmi +, - et / (pour simplifier, on ne
considèrera pas la multiplication) et qui affiche le résultat. Le script devra renvoyer un message
d’erreur lorsque le nombre d’arguments est incorrect.
Modifier ce script pour qu’il puisse calculer la somme d’un nombre quelconque de chiffres
entré en paramètre

Exercice 5
Écrire 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

11
➢ "insuffisant" si la note est inférieur à 10

Exercice 6
Ecrire une commande Jeter qui permet de manipuler une poubelle de fichiers, nommée
poubelle et située à la racine. La commande accepte trois options :
1. Lister le contenu de la poubelle (- l) ;
2. Vider la poubelle (-v ) ;
3. jeter fichier1 fichier2 ... pour déplacer les fichiers vers la poubelle ( -j).

12
Les scripts shell bash
TP 4
Exercice N° 1 :
Écrire un script qui prend un nombre en saisie élève ce nombre à sa propre puissance.
Exemple :
Saisir une valeur : 3 3^3 = 27

Exercice N° 2 :
Créer un script nommé "table" permettant d'afficher des tables de multiplication. Exemple :
Table de multiplication de 5 :
0x5=0
1x5=5
2 x 5 = 10
3 x 5 = 15
4 x 5 = 20
5 x 5 = 25
6 x 5 = 30
7 x 5 = 35
8 x 5 = 40
9 x 5 = 45
10 x 5 = 50

Exercice N° 3 :
Créer un script permettant d'afficher la liste des fichiers du répertoire /etc accessibles en
lecture.

Exercice N° 4 :
En utilisant la structure while, écrire un script qui : Tant que l’utilisateur n’a pas tapé 9, affiche
un menu, demande à l’utilisateur de saisir une option du menu et affiche à l’utilisateur le résultat
de sa commande.

*********** Menu général **********************


1 Afficher la date (date)
2 Afficher les personnes connectées (who)
3 Afficher le contenu du répertoire courant (ls)
9 Quitter

13
Exercice 5
Ecrire un Shell script Unix qui affiche le nombre et la liste des répertoires qui se trouvent dans
le répertoire courant. Etendre le Shell Script de manière à effectuer un traitement similaire dans
un répertoire lu en argument .
Exercice 6
Ecrire un Shell script taille, qui affiche la liste des répertoires contenus dans un répertoire saisi
en paramètre, ainsi que leur taille en KO.

Exercices 7 : les notes


Écrire 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 "moyen" si la note est entre 10 et 12
"bien" lorsqu'elle est entre 14 et 16 "insuffisant" si la note est inférieur à 10
"assez bien" si la note est entre 12 et 14
Le programme s’arrête si l’utilisateur saisie une note négative.

Exercices 8 :
Ecrire un-Shell script Unix, effaçant tous les fichiers du répertoire courant sauf un dont le
nom est lu en argument.

14
Université Hassan II
de Casablanca
Faculté Des Sciences Ben M’Sik

Département de Mathématiques et Informatique

Les scripts shell bash


TP 5
Exercice 1 :
Ecrire un script shell prend le nom d'un répertoire et compte tous les sous-répertoires
(récursivement).

Exercice 2 :
Écrire un script qui nommé som.sh qui prend un nombre indéterminé d'arguments (entiers) en
ligne de commande et calcule leur somme. Ajouter un nombre à la somme uniquement si le
nombre est supérieur à 10

Exercice 3 :
Écrivez un script shell qui prend un fichier où chaque ligne est donnée au format (
F08,guna,Gunawardena,Ananda,SCS,CSD,3,L,4,15123 ,G ,,)
Crée un dossier pour chaque nom d'utilisateur (par exemple : guna) et définit l'autorisation
d'accès rw pour l'utilisateur uniquement

Exercice 4 :

Écrivez un script shell qui prend le nom d'un dossier et supprimez tous les sous-dossiers
de taille 0

Exercice 5
Écrire un script les_droitscript qui donne les droits d’un fichier passé comme paramètre
sous la forme suivante :

15
16

Vous aimerez peut-être aussi