Académique Documents
Professionnel Documents
Culture Documents
Polycopie de TP Systeme d'exploitation II 2024
Polycopie de TP Systeme d'exploitation II 2024
Système d’exploitation 2
Polycopié de TP
Linux : Script Shell
Filière SMI / S4
1
Université Hassan II
de Casablanca
Faculté Des Sciences Ben M’Sik
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 ?
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)
5
Les scripts shell : Résumé
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
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.
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
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
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.
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 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
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