Vous êtes sur la page 1sur 13

SYSTEME LINUX ET PROGRAMMATION SYSTEME EN SHELL

TRAVAUX PRATIQUES
Questions

1. Créer un script shell nommé "change" qui affichera la date de dernière modification d'un fichier
puis la modifiera avec l'heure actuelle et enfin réaffichera la date de dernière modification du
fichier.
Cette procédure acceptera 1 paramètre qui sera le nom du fichier.
Lorsque vous exécuterez "change mon_fic", le 12 février à 18 heures 12 vous obtiendrez le
résultat:
avant : -r--r--r-- 1 user group 40 Jan 8 2012 mon_fic
après : -r--r--r-- 1 user group 40 Fev 12 18:12 mon_fic
2. Créer un script shell nommé ‘’nombreJours’’ qui affichera le nombre de jours du mois courant.
‘’nombreJours’’ affichera pour février 2013 le message ‘’28 jours en février 2013’’.
3. Créer un script shell réalisant la création d’un répertoire ‘’Exercice25’’ contenant 15 fichiers
nommés ‘’Un’’ à ‘’Quinze’’. Chaque fichier contient une seule ligne :
i) ‘’Un’’ contient ‘’Première ligne’’
ii) ‘’Deux’’ contient ‘’Deuxième ligne’’
iii) …
iv) ‘’Quinze’’ contient ‘’Quinzième ligne’’
N.B : Vérifier que le répertoire à créer n’existe pas déjà sinon il ne sera pas recréé mais
les fichiers oui.
4. Créer un script shell qui réalise les opérations suivantes :
- Création sous votre répertoire ‘’TP2’’ d’un sous répertoire nommé ‘anneemoisjour’’ (Ex :
20160912 pour le 12 février 2013).
- Copie des fichiers de Exercice26 sous ce répertoire puis effacement de ces mêmes fichiers de
‘’Exercice26’’.
- Création de deux fichiers sous le répertoire d’accueil (Home) de la personne qui a lancé le
shell :
 Un fichier nommé ‘’Gros_fichier.numero_du_shell’’ dans lequel se trouvera le
contenu concaténé des fichiers traités
 Un fichier nommé ‘’Nom_du_script.numero_du_shell’’ dans lequel se trouvera le
nom des fichiers traités.

Vérifier que le répertoire à créer n’existe pas.


5. Créer un script shell permettant d’afficher la liste des fichiers du répertoire /etc accessibles en
lecture.
6. Créer un script shell permettant d’afficher la liste des fichiers du répertoire /etc accessibles en
écriture.

7. Créer un script nommé "table" permettant d'afficher des tables de multiplication. Ex.
"table 5 10" aura pour résultat l'affichage:
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
8. Utilitaire AWK
Les exercices portent sur le fichier mesure suivant:
nom de la lieu de la
date de la valeur correction correction correction valeur
| | | | | | | |
mesure mesure mesure brute 1 2 3 corrigée
18/12/199
marcel | brest | | 12.5 | 1.34 | 1.23 | -1.5 | 13.47 |
8
21/05/199
polo | loctudy | | 11.5 | 1.24 | 1.12 | -1.2 | 12.66 |
7
04/09/199
otto | camaret | | 9.3 | 0.98 | 1.17 | -1.12 | 10.33 |
5
Le champ valeur corrigée est la somme algébrique de la valeur brute et des 3 corrections.

8.1 Vous vous êtes bourrés sur le signe de la correction 1, de même dans la correction 2, vous avez
découvert que vous avez commis une petite erreur et qu'il fallait lui ajouter 0.1. Modifier le
fichier en prenant en compte ces corrections, faites en sorte que la valeur corrigée soit
modifiée en conséquence.
Dans le même exercice vous afficherez la somme totale des valeurs corrigées et la valeur corrigée
moyenne. Ces valeurs doivent être sauvegardées dans un fichier résultat.

8.2 Afficher les mesures ayant une année paire. Redirigez le résultat de la recherche vers un fichier
paire.

8.3 Vérifiez que le format de la date jj/mm/aaaa est correct ainsi que le format du lieu (formé que de
lettres de l'alphabet en minuscules ou majuscules).

8.4 Afficher les noms de mesure et leur valeur corrigée associée en vous servant d'un tableau
associatif.

2
@2016 Travaux pratiques – Programmation système en Shell
9. Cherchez dans toute l'arborescence les fichiers dont le nom se termine par .c, redirigez les erreurs
vers le fichier poubelle /dev/null
Commençant par X ou x.
Dont les noms ne contiennent pas de chiffre.
10. Chercher dans /usr les fichiers dont la taille dépasse 1Mo (2000 blocs de 500Ko) et dont les droits
sont fixés à 755 (-rwxr-xr-x).
11. Combien il y a de fichiers dans toute l'arborescence vous appartenant et ayant les droits fixés à
666 (-rw-rw-rw-).
12. Trouver tous les fichiers core dans l'arborescence et supprimez-les après confirmation.
13. Copiez le fichier /etc/passwd dans votre home directory. Editez uniquement les champs
contenant le login et la home directory.
14. Triez passwd sur le nom
15. 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.
16. Dans le fichier de résultat précédent remplacer les ":" par des " " (espace).
17. Editez les cinq dernières lignes du fichier.
18. Editez les cinq premiers caractères du fichier.
19. Créer un répertoire essai-grep dans votre home directory. Dans ce répertoire créer les fichiers
suivants:
tomate poire pomme cerise Fraise fraise courgette POMME3 afraise
Editez les fichiers (sortie de la commande ls redirigée vers grep) avec les critères sur leur nom
suivant:
Critère 1 Le nom doit être Fraise ou fraise
Critère 2 se est en fin de nom
Critère 3 ai est présent dans le nom
Critère 4 Nom contenant un chiffre numérique
Critère 5 Nom contenant la chaîne mm ou MM
20. Copiez le fichier /etc/passwd dans votre home directory. Editez la ligne commençant par votre
nom de login.
21. Dans le fichier passwd qui est dans votre home directory, éditez les lignes commençant par des
noms de login ne contenant pas de chiffre.
22. Editez les lignes du fichier passwd commençant par des noms de login de 3 ou 4 caractères.

3
@2016 Travaux pratiques – Programmation système en Shell
23. Dans votre répertoire courant, créez un répertoire courant essai_droit, par défaut ce répertoire
est à 755 (rwxr-xr-x), quelles sont les commandes (en notation symbolique et en base 8) pour lui
donner les droits suivant (on suppose qu'après chaque commande on remet le répertoire à 755:
propriétaire groupe les autres
droit en droit en droit droit en droit en droit droit en droit en droit
lecture écriture d'accès lecture écriture d'accès lecture écriture d'accès
commande
oui oui oui oui non oui non non oui
1
commande
oui non oui non oui non non non oui
2
commande
non oui non non non oui oui non non
3
commande
non non oui oui non oui non non non
4
24. Créez un fichier droit dans le répertoire essai_droit, par défaut ce fichier est à 644 (rw-r--r--).En
partant du répertoire courant, pour chaque commande de l'exercice précédent, essayez
d'accèder au répertoire essai_droit (commande cd), de faire un ls dans essai_droit et de modifier
le fichier avec un éditeur quelconque (vi par exemple).
25. Tapez la commande umask, de manière à ce que les fichiers lors de leur création aient par défaut
les droits 640 (rw-r-----), et les répertoires 750 (rwxr-x---).
26. Dans votre répertoire courant, créez en une commande les fichiers suivants:
annee1 Annee2 annee4 annee45 annee41 annee510 annee_saucisse banane
27. Créer le répertoire Year dans votre répertoire courant, en une commande déplacez les fichiers
précédemment créés dans le répertoire Year.
28. Lister tous les fichiers
se terminant par 5
commençant par annee4
commençant par annee4 et de 7 lettres maximum
commençant par annee avec aucun chiffre numérique
contenant la chaîne ana
commençant par a ou A

29. Copier les fichiers dont l'avant dernier caractère est un 4 ou 1 dans le répertoire /tmp en une
seule commande.
30. Afficher le nombre de sessions ouvertes (c-à-d connexions) sur la machine tout en générant le
détail de ses connexions dans le fichier connectes.
31. Afficher les L lignes qui entourent la ligne numéro N d'un fichier F. Utiliser cette méthode pour
afficher une partie du texte qui entoure la ligne où se trouve une chaîne S qu'on cherche dans un
fichier F (utiliser la commande grep).
32. Copier sur une clé USB tous les fichiers .sql modifiés ce jour.
33. Envoyer par mail à un utilisateur les noms des fichiers .sql et les fichiers .c modifiés ce jour et
dont la taille est supérieur à un kilo-octet.
34. Exécuter le script traitement se trouvant sous bin de votre répertoire de connexion :

4
@2016 Travaux pratiques – Programmation système en Shell
- Le Vendredi à 17h00
- La semaine prochaine au même moment
- Deux jours plus tard
35. Demander, de différentes manières, d'exécuter le script traitement à 16h15 le 24 février 2013,
sachant que nous somme en octobre 2012.
36. Alimenter, toutes les heures, les fichiers charge.jour.log, charge.soir.log et charge.week-end.log
du répertoire charge de votre répertoire de connexion par les informations qui donnent
respectivement la charge du système du jour, du soir des jours de la semaine et tout le week-end.
37. Envoyer tous les premiers janvier de chaque année, le courrier bonne_annee à vos
correspondants user1, user2, ...
38. Afficher les trois informations suivantes (provenant de /etc/passwd) : nom de connexion de
l'utilisateur, nom complet (champ libre) et shell attribué à l'utilisateur. Si /etc/passwd avait ce
contenu :

root:Uhu)j9Pg[vz0J":0:0:Le manie tout:/:/bin/tcsh


daemon:*:1:1::/etc:
bin:*:2:2::/usr/bin:
sys:*:3:3::/usr/src:
adm:*:4:4: Administrateur du système:/usr/adm:/bin/sh
adam:QfTyu(lfmL$:100:100:Adam Poupon:/home/staff/adam:/bin/ksh
durand:gVFGjui01kj:102:100:Michel Durand:/home/staff/durand:/bin/ksh

Le résultat devrait être :


USER WHO IS SHELL
root Le manie tout /bin/tcsh
daemon
bin BIN
sys SYS
adm Administrateur du système /bin/sh
adam Adam Poupon /bin/ksh
durand Michel Durand /bin/ksh

39. Soit compte le fichier des comptes des clients. On suppose qu'il a la structure suivante : 5 chiffres
pour le code banque, 5 chiffres pour le code guichet, 10 chiffres pour le numéro de compte, 1
lettre pour compléter le numéro de compte, 2 chiffres pour la clé RIB, 30 caractères pour la
désignation du client. Produire en sortie les informations suivantes (séparées par la barre
verticale) : Désignation du client, son numéro à 10 chiffres et la lettre complétant ce numéro. Soit
gestion le fichier des gestionnaires des comptes. Il se compose de lignes ayants les champs
(séparés par la barre verticale) suivants : Désignation du gestionnaire, lettre du numéro de
compte des clients dont il est responsable. Produire en sortie un listing avec les informations
suivantes : Désignation du gestionnaire, le client dont il est responsable, le numéro de son
compte.
40. Etant donné le fichier resultats :
Nom Résultats
-------------------------
Yann 104:33:48
Tudor 8:19:0
Patrick 15:98:48

5
@2016 Travaux pratiques – Programmation système en Shell
Carole 104:33:20
Gérard 32:0:10
René 5:13:10
Lucienne 15:98:48

Utilisez la calculatrice en ligne (commande bc pour basic calculator) pour produire un fichier
ayant le contenu de resultats plus une 3ème colonne qui est la somme des trois points de la
colonne résultats.
41. Soit tele un fichier qui contient le répertoire téléphonique suivant :

Boileau 024867-6235
Derrick 024867-1842
Ernest 024867-1234
Grand 024867-2240
Herbrant 024867-0256
Jonathan 024867-7358
Louis 024867-3237
Tardif 024867-5341
Wagner 024867-1234

Et noms la liste suivante des noms et départements correspondants :


Ernest Dept. 389
Frolo Dept. 217
Grand Dept. 311
Tardif Dept. 454
Wagner Dept. 520

Construire un fichier NTD (nom, téléphone, département) où chaque ligne est un nom suivi du
numéro de téléphone puis du numéro de département. Comment faire pour avoir tous les noms
dans le fichier NTD ? Comment obtenir un fichier DNT où chaque ligne est composée (dans cet
ordre) du numéro de département, du nom et du numéro de téléphone ? Soit numeros le fichier
des numéros de téléphones :
024867-0256
024867-1234
024867-5555
024867-7358

Sélectionner du fichier tele les lignes où figurent les numéros du fichier ci-dessus.

6
@2016 Travaux pratiques – Programmation système en Shell
Exercice 1

1) Analyser le script suivant :

# ! /bin/bash

echo ‘’Le nom du script en cours d’exécution est : $0 ’’


echo ‘’Le nombre d’arguments : ${# :-0} ‘’
echo ‘’La liste des arguments est : ${* :-Liste vide} ‘’
echo ‘’Le premier nombre est : ${1 :? ‘’Usage : $0 Nombre_1 Nombre_2 ‘’} ’’
echo ‘’Le deuxième nombre est : ${2 :? ‘’Usage : $0 Nombre_1 Nombre_2 ‘’} ‘’
resultat = è xpr $1 + $ ̀̀
echo ‘’$1 + $2 = $resultat ‘’

exit 0

Quel est l’intérêt de ?

- ${# :-0}
- ${* :-Liste vide}
- ${1 :? ‘’Usage : $0 Nombre_1 Nombre_2 ‘’}

2) Modifier le script précédent en ajoutant dans la liste des paramètres le symbole de


l’opération en tant que deuxième argument du script. Les opérations autorisées
sont : + (addition), - (soustraction), / (division entière) et % (modulo ou reste de la
division entière). Le script est lancé de la manière suivante :
./Calcul nb1 operateur nb2
Par exemple :
$ ./Calcul 6 % 5

Le nombre d’arguments saisis est : 3


La liste des arguments est : 6 % 5
Le premier nombre est : 6
Le deuxième nombre est : 5
Opération demandée : %
6%5=1

Que se passe-t-il si vous utilisez le symbole * pour réaliser l’opération de


multiplication ? Pourquoi ?
Réécrire ce script sans utiliser la commande expr.

3) Créer un script MultDiv2 qui réalise des multiplications et des divisions successives
d’un nombre par 2. Le choix de l’opération est saisi par l’utilisateur. Le nombre
d’itérations et le nombre à traiter sont des paramètres du script. Pour réaliser ce
traitement, le script n’utilise pas les opérateurs * et /.

7
@2016 Travaux pratiques – Programmation système en Shell
Exercice 2

1) Créer un script AjoutePers qui permet la saisie du formulaire suivant :


- Civilité d’une personne (M., Mme, Mlle) ;
- Son nom ;
- Son prénom ;
- Sa date de naissance sous le format jj/mm/aaaa ;
- Sa situation familiale (Célibataire, Divorcé(e), Marié(e), Pacsé(e)) ;
- Nombre d’enfants à charge ;
- Sa nationalité ;
- Sa profession.

Ces informations sont ajoutées dans un fichier nommé Personnes. Elles sont séparées par des points-
virgules. Chaque ligne contient les données d’une personne. La structure d’une ligne du fichier est la
suivante :

Civilité ; nom ; prenom ; date de naissance ; situation familiale ; nombre d’enfants ; nationalite ;
profession

Le script effectue un tri sur le fichier avant d’en sauvegarder une copie dans le répertoire /tmp.

2) Pour éviter des erreurs de saisie d’une part et pour accélérer la saisie d’autre part,
l’utilisateur se contente de taper la première lettre concernant sa situation familiale (C pour
Célibataire, …). Le script interprète la lettre par le mot correspondant dans la base.
3) Le script précédent présente un grand inconvénient quant à la non redondance
d’informations. Remédier à ce problème en interrompant le script lorsque les informations
saisies correspondent à une ligne existante.
4) Modifier le script précédent pour donner le choix à l’utilisateur concernant la sauvegarde de
secours. Deux cas sont alors possibles :
- L’utilisateur exploite toujours le même fichier (/tmp/Personnes).
- L’utilisateur décide d’un nouveau fichier. Dans ce cas, le script demande la saisie du
nouveau nom. Si ce dernier existe, le script demande confirmation à l’utilisateur.
5) Afin de réaliser une étude sociologique sur notre population, rajouter dans votre les calculs
suivants :
- Le nombre total des personnes ;
- Le nombre total de la population masculine ;
- Le nombre total de la population féminine ;
- Le nombre total de personnes par situation familiale et leur répartition sur les deux
populations ;
- La moyenne d’âge des deux opérations ;
- La répartition homme/femme par catégorie socioprofessionnelle.
6) Votre script doit réaliser les opérations suivantes :
- Consulter la base de données (1) ;
- Consulter les informations d’une personne (2) ;
- Ajouter une personne (3) ;
- Supprimer une personne (4).

8
@2016 Travaux pratiques – Programmation système en Shell
Pour cela, le script est lancé avec un numéro d’opération (1, 2, 3 ou 4). Si le numéro ne correspond
pas à un choix possible, le script demande à l’utilisateur de saisir un choix.

A la fin de chaque traitement, le script demande à l’utilisateur s’il veut recommencer avec une autre
opération ou s’il souhaite quitter le programme. Si l’utilisateur répond à la question par la lettre N ou
n, le programme se termine, sinon le script recommence la saisie de l’opération à traiter.

Exercice 3

1) Ecrire un script Recherche qui effectue une recherche de fichier en fonction du nom et du
type du fichier. Le script est lancé avec les paramètres suivants :
a. Le nom du fichier concerné par la recherche ;
b. Le nom du répertoire où s’effectue la recherche ;
c. Une option qui indique le type du fichier. Les options possibles sont : -f (fichier
ordinaire), -d (répertoire), -l (lien symbolique), -b (fichier spécial bloc) et –c (fichier
spécial caractère).
2) Ecrire un script Recherche_user qui effectue une recherche d’un nom d’utilisateur dans des
fichiers système selon l’option mentionnée. Les options possibles sont :

-p : recherche de l’utilisateur dans /etc/passwd


-g : recherche de l’utilisateur dans /etct/group
-a : recherche de l’utilisateur dans /etc/at.allow. Le script doit vérifier l’existence du fichier.
-c : recherche de l’utilisateur dans /etc/cron.allow. Le script vérifie l’existence du fichier.

Exercice 4

1) Ecrire un script InputOutput qui lit une entrée depuis un fichier spécifié par l’utilisateur.
Chaque ligne du script sera précédée d’un numéro de ligne et affichée dans un fichier de
sortie indiqué par l’utilisateur. Toute instruction read dans le script doit ignorer les E/S
standard et travailler uniquement avec les deux fichiers transmis en paramètre du script.
Réaliser les redirections à l’intérieur du script.
2) Modifier le script précédent de manière à ce que la redirection soit effectuée sur la ligne de
commande. Le nom du nouveau script est : InputOutputCmd.
3) Ecrire un script qui lit depuis le fichier /etc/passwd et qui sépare les champs par des
tabulations. Le résultat est redirigé vers le fichier donné en argument au script.
4) Exécuter le script suivant :

# ! /bin/bash
exec 3> Output1
exec 4< /etc/group
while read –u4 ligne
do
IFS= :
set $ligne
print –u3 ‘’$1\t$2\t$3\t$4 ‘’
done
exit 0

9
@2016 Travaux pratiques – Programmation système en Shell
- Est-ce que le fichier Output1 a été créé ?
- Si oui, afficher son contenu.
- Que se passe-t-il si l’option –u4 est omise dans l’instruction read ?
- Que se passe-t-il si l’option –u3 est omise dans l’instruction print ?

Exercice 5

1) Rédiger les instructions qui permettent d’afficher sur l’écran le menu suivant :

MENU – GESTION DES SALARIES


=====================================
Saisir les informations personnelles d’un salarié, taper 1.
Mettre à jour les informations personnelles d’un salarié, taper 2.
Consulter les informations personnelles d’un salarié, taper 3.
Consulter les informations de tous les salariés, taper 4.
Supprimer un salarié, taper 5.
Quitter, taper -100.

2) Rédiger les commandes qui permettent la saisie du choix dans le menu.


3) Les informations personnelles d’un salarié qui doivent être saisies sont :
- Le nom et le prénom ;
- La date de naissance ;
- La situation familiale ;
- Le numéro matricule ;
- L’adresse ;
- Le numéro de téléphone.

Une fois ces informations saisies, vous devez les sauvegarder dans un fichier dont le nom est
défini dans la variable fichier_salaries au début du script. Les différentes informations sont
séparées par le caractère ‘ ; ‘ pour pouvoir exporter ces données vers d’autres logiciels
comme Excel ou d’autres systèmes de gestion de bases de données.

Chaque saisie doit être vérifiée.

4) Toutes les informations saisies peuvent être modifiées. Les nouvelles données sont vérifiées
et validées avant leur enregistrement dans la base.
5) Afficher les informations d’un salarié.
6) Afficher les informations de tous les salariés.
7) Supprimer les informations concernant un salarié.
8) Quitter l’application après avoir demandé une confirmation de la part de l’utilisateur.

10
@2016 Travaux pratiques – Programmation système en Shell
Exercice 6

1) Afficher la liste des signaux.


2) Lancer la commande xclock en arrière-plan.
3) Afficher le numéro PID et l’état du processus associé à xclock.
4) Envoyer le signal 15 au processus xclock. Que se passe-t-il ?
5) Lancer la commande suivante : trap ‘ ‘ 15
6) Relancer xclock. Essayer d’envoyer le signal 15 au processus xclock pour le supprimer. Ce
processus se termine-t-il ?
7) Rétablir l’action du signal 15.
8) Envoyer à nouveau le signal 15 au processus xclock. Que se passe-t-il ? Si le processus ne se
termine pas, envoyer un autre signal pour le terminer.
9) Relancer à nouveau le processus xclock en arrière-plan.
10) Envoyer le signal 15 à ce processus. Se termine-t-il ?
11) Ecrire un AttenteFin qui attend que l’utilisateur saisisse le caractère N ou n pour arrêter le
script. Rajouter une instruction de manière à ce que le script ignore la combinaison des
touches CTRL – C qui termine l’exécution d’un processus.
Lancer le script et essayer de l’interrompre avec les touches CTRL – C. Ce dernier
s’interrompt-t-il ?

Exercice 7

1) A l’aide la commande awk, afficher l’état d’un processus, son numéro PID et son nom.
2) Afficher l’année courante.
3) Afficher les noms de connexion et leur numéro UID. Les lignes sont numérotées dans un
ordre croissant.
4) Afficher le plus gros UID en dehors 65536.
5) Afficher le plus gros GID en dehors du GID 65536.
6) Afficher la liste des fichiers de votre répertoire courant et leurs permissions.
7) Afficher le contenu du fichier /etc/passwd en remplaçant le caractère ‘ : ‘ par une tabulation.

Exercice 8

1) Afficher la liste des utilisateurs qui ont un numéro de compte égal à 0.


2) Afficher la liste des utilisateurs dont le nom débute par la lettre b.
3) Afficher la liste des utilisateurs qui ne se sont jamais connectés.
4) Afficher la liste des utilisateurs qui sont connectés sur votre système.
5) Afficher les noms des machines définies dans le fichier /etc/hosts.
6) Afficher la liste de tous les utilisateurs connectés ainsi que la date de leur dernière
connexion.
7) Afficher la liste des utilisateurs connectés dont le nom de login commence par a.
8) Afficher la liste des utilisateurs dont le shell de connexion est bash.
9) Afficher l’adresse IP de votre système.
10) Afficher la capacité totale d’utilisation de l’espace disque sur votre partition.

11
@2016 Travaux pratiques – Programmation système en Shell
11) Afficher la taille totale de votre répertoire courant.
12) Du fichier /etc/passwd, afficher en majuscule les logins des comptes utilisateurs qui ont un
UID supérieur à 100. Le format de l’affichage vous est imposé :
<login sur 20 caractères> a pour UID <uid>
L’exécution vous est aussi imposée :
$ awk –f traitement.awk /etc/passwd

Exercice 9

1) Ecrire un script TaillePart qui affiche la capacité totale utilisée sur l’ensemble des partitions.
2) Ecrire un script Total qui affiche le nombre de lignes de tous les fichiers de même extension
qui se trouvent dans une arborescence. L’extension des fichiers et de l’arborescence sont des
paramètres transmis au script.
Exemple : $ ./Total /etc conf
3) Créer un fichier de traitement exploitable par la commande awk afin d’afficher la deuxième
partie de l’adresse mail (le nom du domaine réseau). Il est demandé d’utiliser les fonctions
internes de la commande awk : substr, length, index.

$ cat Adresses

Jean-Marc Dupont|jean@dupont.fr|30|1 rue des couronnes|13000|Marseille


Marc Martin|marc@martin.fr|45|5 avenue des roses rouges|75020|Paris
Eve Dupont|eve@dupont.fr|14|1 rue des couronnes|13000|Marseille
Henri Cazaux|henri@cazaux.fr|66|10 rue de lespoir|75010|Paris
Noelle Dupont|noelle@dupont.fr|50|1 rue des couronnes|13000|Marseille
Alain Dupont|alain@dupont.fr|50|1 rue des couronnes|13000|Marseille
Muriel Dupont|muriel@dupont.fr|6|1 rue des couronnes|13000|Marseille
Theophile Azerty|theophile@azerty.fr|30|44 boulevard source|13120|Salon
Celine Guillotin|celine@guillotin.fr|30|7 rue paradis|75020|Paris
Frederic Dupont|frederic@dupont.fr|12|1 rue des couronnes|13000|Marseille

L’entête du fichier est :


Prenom Nom|Adresse-mail|Age|Adresse|Code-postal|Ville

4) Du fichier Adresses précédent, afficher :


- Pour chaque ligne : ‘’Bonjour Prenom ! Vous habitez à Ville.
- Pour chaque membre de la famille ‘’Dupont ‘’, afficher sous la ligne et seulement pour les
mineurs : ‘’Tu as Age ans et tu es mineur(e). ’’

Exercice 10

1) Ecrire une fonction Existe qui recherche un utilisateur dans un fichier. Le choix du fichier est
défini par une option qui est transmise à la fonction. Si l’option est égale à la lettre ‘u ‘, la
recherche s’effectue dans le fichier /etc/passwd. Si l’option est égale à la lettre ‘g ‘, la
recherche s’effectue dans le fichier /etc/group. La fonction transmet un code de retour égal à
0 en cas de succès et à 1 autrement.

12
@2016 Travaux pratiques – Programmation système en Shell
2) Ecrire une fonction Saisie qui permet de lire à partir du clavier :
- Un nom d’utilisateur si l’option transmise est ‘u’.
- Un nom de groupe si l’option transmise est ‘g’.

Exercice 11

Ecrire une fonction :

1) CreateUser qui crée un compte utilisateur.


2) ModifyUser qui modifie un compte utilisateur.
3) DisplayUser qui affiche des informations sur un compte utilisateur.
4) DeleteUser qui supprime un compte utilisateur.
5) CreateUsersList qui automatise la création de comptes listés dans un fichier.

Exercice 12

Ecrire une fonction :

1) CreateGroup qui crée un groupe utilisateur.


2) ModifyGroup qui modifie un groupe utilisateur.
3) DisplayGroup qui affiche des informations sur le groupe et les membres du groupe.
4) DeleteGroup qui supprime un groupe utilisateur.

Exercice 13

Ecrire une fonction :

1) ArchiveDir qui archive un répertoire.


2) DisplayArchive qui permet de visualiser le contenu d’une archive.
3) restoreDir qui procède à l’extraction d’une archive.
4) CompressArchive qui compresse une archive.
5) DecompressArchive qui décompresse une archive.
6) Créer un menu qui permet de faire appel aux fonctions écrites aux questions précédentes.

13
@2016 Travaux pratiques – Programmation système en Shell

Vous aimerez peut-être aussi