Académique Documents
Professionnel Documents
Culture Documents
INSA Hauts-de-France
2A SHPI
TP3: introduction à la programmation Shell
Outils :
Pour réaliser ce TD, vous aurez besoin d’un terminal de n’importe quelle distribution Gnu/Linux.
Il est préférable d’avoir une distribution Gnu/Linux installée sur votre PC, en natif (en dual boot si vous êtes sur
Windows) ou sous forme de machine virtuelle (solution plus sûre). Il existe également des solutions de shell en
ligne : https://cocalc.com/doc/terminal.html. Il est recommandé de créer vôtre compte afin de sauvegarder le
travail réalisé.
Rendus :
Tous les scripts sont à rendre sur moodle dans une archive zip.
Terminal Linux :
Un terminal est un outil performant permettant d’exécuter des commandes. Ces commandes accomplissent toutes
les tâches que l’on peut faire habituellement avec une interface graphique (bureau et fenêtre) ; souvent en mieux.
Le commandes peuvent être lancées d’une manière interactive (lancer une commande, voir le résultat, puis lancer
une deuxième commande, …). Elles peuvent aussi être regroupées dans un seul fichier appelé script (comme en
Python) qui va être exécuté par un interpréteur : sh, bash, csh, zsh, etc.
Pour la réalisation des exercices de cette fiche, nous allons utiliser l’interpréteur sh qui est l’interpréteur par défaut
de toutes les distributions Gnu/Linux.
Fichiers et répertoires:
La commande ls permet de lister tous les fichiers et répertoires existants dans le répertoire de travail (répertoire
courant).
A) Dans le terminal shell, lancez la commande suivante :
$ ls
Observez bien le résultat obtenu !
B) Maintenant lancez la commande suivante :
$ touch fichier1.txt
C) Relancez la commande :
$ ls
Observez le résultat maintenant et comparez le avec le résultat du premier ls.
1. Y’a t-il une différence ? Si oui, laquelle ?
2. Quelle est donc le rôle de la commande touch ?
D) Lancez la commande :
$ rm fichier1.txt
E) Relancez la commande :
$ ls
Observez le résultat maintenant et comparez le avec le résultat du précédent ls de (commande C).
3. Y’a t-il une différence ? Si oui, laquelle ?
4. Quelle est donc le rôle de la commande rm ?
F) Lancez la commande :
$ mkdir mydir1
G) Relancez la commande :
$ ls
Observez le résultat maintenant et comparez le avec le résultat du précédent ls de (commande E).
5. Y’a t-il une différence ? Si oui, laquelle ?
H) Lancez la commande :
$ rm mydir1
6. Comment interpréteriez-vous le résultat obtenu ?
7. Quelle est donc le rôle de la commande mkdir?
8. En déduire la différence entre touch et mkdir.
I) Maintenant lancez l’ensemble des commandes suivantes, l’une après l’autre, et observez les résultats
intermédiaires s’il y’en aura :
$ pwd
$ mkdir mydir2
$ cd mydir2
$ pwd
$ cd ../
$ pwd
$ rmdir mydir2
$ ls
9. Quelle est le rôle de la commande pwd ?
10. Interprétez la commande cd mydir2 et la commande cd ../?
11. Quelle est le rôle exacte de la commande rmdir ?
J) Maintenant lancez la commande ls, relancez la commande B en remplaçant fichier1.txt par .fichier1.txt puis
relancez la commande ls. Y’a t-il une différence entre les résultats des deux ls?
Lancez la commande ls avec l’option -a (ls -a) et notez le résultat.
12. Quelle est donc le rôle du point qui précède le fichier1.txt?
13. Quelle est le rôle de l’option -a de la commande ls?
14. Testez la commande ls avec les option -l puis -t, puis avec les trois options ensemble (ls -alt) et donner le
rôle de chaque option.
K) Créez quatre fichiers : file1.txt, file2.txt, file3.c, et file4.py. Affichez le contenu du répertoire courant puis
lancez les commandes :
$ rm *.txt
15. Ré-affichez le contenu du répertoire et déduire la signification du ‘*.txt’ ?
16. Donnez la commande qui permet de supprimer tous les fichiers dont le nom commence par ‘monfichier’
et les fichier dont le nom se termine par ‘.log’.
17. Donnez les commandes permettant de tester votre proposition (création, affichage du contenu,
suppression, …).
L) Maintenant que vous avez compris les concepts des commandes, vous pouvez manipuler les fichiers et les
répertoires à votre guise. Donnez les commandes qui permettes de :
18. Créer 3 répertoires (mkdir) avec les noms : my_1_dir, my_2_dir, et my_3_dir
19. Vous placer dans my_1_dir
20. Créer trois fichier avec l’extension .py, deux fichier avec l’extension .sh
21. Vous placer dans my_2_dir sans revenir au répertoire père (../)
22. Créer deux fichier avec l’extension .c et deux fichier .py
23. Vous placer dans my_3_dir sans revenir au répertoire père (../)
24. Créer deux fichiers avec l’extension .c, deux fichiers .py, et deux fichiers .sh
25. Vous placez dans le répertoire père
26. Changer les noms des répertoires de my_1_dir à my_py_dir, my_2_dir à my_c_dir, et my_3_dir à
my_shell_dir (voir la commande mv)
27. En une commande, supprimer les fichiers avec l’extension .sh du répertoire my_py_dir, supprimer les
fichiers avec l’extension .py du répertoire my_c_dir, et supprimer les fichiers avec l’extension .c et .py du
répertoire my_shell_dir (pensez à *). On peut exécuter plusieurs commandes à la fois en les séparant par
un point-virgule ‘;’.
28. En une commande, créer un nouveau répertoire (applé all_codes) dans le répertoire père, puis copier tous
les fichiers des répertoires crées précédemment dans le répertoire all_codes (voir la commande cp).
29. Supprimer tout ce que vous avez créé et relancer vos commandes précédentes comme suit :
32. Écrivez un script qui prend deux nombres en tant qu'arguments et affiche leur produit. Pour les
opérations arithmétiques, exécutez et essayer de comprendre leur fonctionnement selon l’exemple suivant :
#!/bin/bash
a=5
b=3
result=$((a + b))
echo "La somme de $a et $b est : $result"
33. Créez un script qui prend en paramètre votre nom et votre age. Ensuite, affichez un message qui indique
"Bonjour, [Nom] ! Vous avez [Âge] ans."
34. Écrivez un script qui prend deux nombres en entrée et effectue des opérations arithmétiques de base
(addition, soustraction, multiplication, division).
4. Pipelines :
Description : Les pipelines connectent la sortie d'une commande à l'entrée d'une autre, vous permettant de
chaîner des commandes.
Exemple :
# Utiliser un pipeline pour filtrer la sortie
cat donnees.txt | grep "mot-clé" | sort
5. Substitution de commande :
Description : La substitution de commande vous permet de capturer la sortie d'une commande et de l'utiliser
dans une autre commande ou une assignation.
Exemple :
# Utiliser la substitution de commande
date_actuelle=$(date)
echo "Date actuelle : $date_actuelle"
35. Créez un script qui prend deux arguments (noms de fichiers) et les concatène dans un troisième fichier.
L’alternance en shell:
En script shell, l'instruction if est une structure de contrôle qui permet de prendre des décisions dans votre
script en fonction de l'évaluation d'une expression conditionnelle. La syntaxe de base d'une instruction if
dans un script shell est la suivante :
if [ condition ]; then
# Code à exécuter si la condition est vraie
else
# Code à exécuter si la condition est fausse
fi
Voici une explication des composants :
• if : Le mot-clé qui démarre le bloc conditionnel.
• [ condition ] : L'expression conditionnelle entre crochets carrés. Cette expression est évaluée comme
vraie ou fausse.
• then : Le mot-clé qui indique le début du bloc de code à exécuter si la condition est vraie.
• else : Mot-clé facultatif qui indique le début du bloc de code à exécuter si la condition est fausse.
• fi : Le mot-clé qui termine l'instruction if.
36. Écrivez un script qui demande à l'utilisateur son âge et affiche un message différent en fonction de la
tranche d'âge (par exemple, enfant, adolescent, adulte).
37. Écrivez un script qui de mande à l’utilisateur d’introduire un nombre puis vérifie si ce nombre est pair ou
impair.
38. Écrivez un script qui compare deux chaînes et affiche un message en fonction du résultat de la
comparaison.
1. Boucle "for" :
for variable in liste_d_elements
do
# Instructions à exécuter pour chaque élément
done
Exemple
# Affiche les nombres de 1 à 5
for i in 1 2 3 4 5
do
echo $i
done
On peut également utiliser une séquence numérique avec l'opérateur « .. » :
# Affiche les nombres de 1 à 5
for i in {1..5}
do
echo $i
done
2. Boucle "while" :
La boucle "while" est utilisée pour exécuter des instructions tant qu'une condition spécifiée est vraie.
while condition
do
# Instructions à exécuter tant que la condition est vraie
done
Exemple
# Affiche les nombres de 1 à 5 en utilisant une boucle while
counter=1
while [ $counter -le 5 ]
do
echo $counter
((counter++))
done
39. Écrivez un script shell qui utilise une boucle "for" pour afficher les nombres pairs de 1 à 50.
40. Écrivez un script shell qui utilise une boucle "for" pour afficher la table de multiplication d'un nombre
spécifié par l'utilisateur.
41. Écrivez un script shell qui utilise une boucle "while" pour demander à l'utilisateur d'entrer un nombre N,
puis calcule la somme des nombres de 1 à N.
42. Écrivez un script shell qui génère un nombre aléatoire entre 1 et 100. Ensuite, utilisez une boucle "while"
pour demander à l'utilisateur de deviner le nombre. Donnez des indications telles que "trop grand" ou "trop
petit" jusqu'à ce que l'utilisateur devine correctement. Pour la génération d’un nombre aléatoire en shell,
utilisez la commande « shuf ». voici un exemple de son utilisation:
# Générer un nombre aléatoire entre 1 et 10
nombre_aleatoire=$(shuf -i 1-10 -n 1)
# Appel de la fonction
fonction_locale
43. Écrivez une fonction appelée calculer_moyenne qui prend trois nombres en paramètres et renvoie leur
moyenne. Affichez le résultat.
44. Écrivez une fonction appelée convertir_celsius_fahrenheit qui prend une température en degrés Celsius
en paramètre et affiche la conversion en degrés Fahrenheit.
45. Écrivez une fonction récursive appelée afficher_nombres qui prend un nombre en paramètre et affiche
tous les nombres de 1 à ce nombre.
46. En utilisant les fonctions, ecrivez un script qui demande à l'utilisateur de saisir un nombre, puis affiche si
ce nombre est pair ou impair. Ensuite, le script doit demander à l'utilisateur s'il souhaite entrer un autre
nombre et répéter le processus jusqu'à ce que l'utilisateur choisisse de quitter.
47. Ecrivez un script qui permet à l'utilisateur de créer un fichier texte, d'ajouter des lignes de texte, puis
d'afficher le contenu du fichier à la fin. L'utilisateur choisit le nom du fichier, puis le script crée le fichier.
Ensuite, il demande à l'utilisateur de saisir des lignes de texte, les ajoute au fichier à l'aide d’une fonction, et
répète le processus jusqu'à ce que l'utilisateur décide de quitter en saisissant 'q'.
48. En utilisant les fonctions, ecrivez un script qui demande à l'utilisateur de saisir une liste de nombres triés
par ordre croissant, séparés par des espaces, puis effectue plusieurs opérations statistiques, y compris la
moyenne, l'écart type, la médiane.