0% ont trouvé ce document utile (0 vote)
39 vues7 pages

Correction ExamenSystème&Scripting24 Principal

Ce document est un examen de Système & Scripting pour les étudiants, comprenant plusieurs exercices sur des concepts de script Shell. Les exercices incluent des questions à choix multiples, des complétions de code, et la rédaction de scripts pour la gestion de répertoires. L'examen est noté sur 20 points et se déroule sur une durée de 1h30.

Transféré par

gharbi.yahia
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
39 vues7 pages

Correction ExamenSystème&Scripting24 Principal

Ce document est un examen de Système & Scripting pour les étudiants, comprenant plusieurs exercices sur des concepts de script Shell. Les exercices incluent des questions à choix multiples, des complétions de code, et la rédaction de scripts pour la gestion de répertoires. L'examen est noté sur 20 points et se déroule sur une durée de 1h30.

Transféré par

gharbi.yahia
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Examen (correction)

Semestre : 1 2

Session : Principale Rattrapage

ETUDIANT(e)
Nom et Prénom : …………………………………………………... Code :
Classe : …………………………………………………....................
Module : Système & Scripting
Enseignant(s) : UP Systèmes
Classe(s) : 2A22A42
Documents autorisés : OUI NON Nombre de pages : 7
Calculatrice autorisée : OUI NON Internet autorisée : OUI NON
Date : 28/05/2024 Heure : 11H Durée :1H30

**✂

Nom et Signature Nom et Signature Observations


Code Note du Surveillant du Correcteur

/20

Exercice 1 : ( 8points)

Choisir la bonne réponse :

1. Quel signe indique l’état de sortie de la 2. La commande Env ou printenv permet d’ :


dernière commande exécutée ? A. Afficher les arguments
A. $? B. Afficher les variables locales
B. $# C. Afficher les variables d’environnement
C. $$ D. Aucune de ces réponses
D. $!

3. Pour soustraire l’entier b de l’entier a, le 4. Dans un script Shell, la ligne #!/bin/bash :


script à utiliser est : A. Indique le chemin vers le fichier de sortie
A. echo $a-$b du script.
B. echo a-b B. Définit les permissions du script.
C. echo ($a-$b) C. Indique l'interpréteur à utiliser pour
D. echo $(($a-$b)) exécuter le script.
D. Définit la variable d'environnement du
script.

5. Pour définir une variable utilisateur var1, 6. Quelle séquence de caractères est utilisée
quelle commande doit-on exécuter ? pour fournir le cas par défaut dans une
A. set var1 valeur1 instruction case :
B. var1=valeur1 A. default:
C. var1 = valeur1 B. =)
D. var var1=valeur1 C. .)
D. *)

1
NE RIEN ECRIRE

7. Dans un script Shell, $1et $0 représentent 8. Laquelle des commandes suivantes


respectivement : permettent d’afficher les lignes du fichier
A. Le premier argument passé lors de « fichier1 » qui commencent par « Robuste »
l’exécution et le nom du script à exécuter. ou « Rabuste»?
B. Le nom du script à exécuter et le premier A. grep r{ a,o}buste$ fichier1
argument passé lors de l’exécution. B. grep ^R[ao] buste fichier1
C. Le premier et le deuxième argument passé C. grep ^r[ao] buste fichier1
lors de l’exécution. D. grep ^R[a-o] buste fichier1
D. Le deuxième et Le premier argument
passé lors de l’exécution.

9. Quelle est la ligne de commande qui donne 10. Comment obtenir la longueur du tableau «
les permissions suivantes au fichier hello.txt array»?
: Lecture, écriture et exécution pour le
propriétaire, écriture et exécution pour les A. Utiliser ${#array[@]}
utilisateurs du groupe et lecture pour les B. Utiliser $array[length]
autres utilisateurs. C. Utiliser $array[#]
A. chmod 774 hello.txt D. Utiliser ${array[length]}
B. chmod 764 hello.txt
C. chmod a= rw- hello.txt
D. chmod u=rwx,g=wx,o=r hello.txt

11. Que signifie 2>&1 dans une ligne d'un 12. Quelle commande permet de vérifier si un
script Shell? fichier existe?
A. Cela permet de rediriger la sortie standard
vers la sortie d’erreur. A. test -e fichier
B. Cela permet de simplifier le passage de B. verify fichier
l’entrée standard vers la sortie standard C. file_exists fichier
C. Cela permet de rediriger à la fois la sortie D. check -f fichier
standard et les erreurs vers le même
fichier.

2
13. Quelle est la commande qui permet de 14. Quel est le résultat de l'exécution du script
déterminer la longueur d’une chaine de suivant ?
caractères nommé « chaine » :

A. ${#!chaine}
B. expr length $chaine
C. expr "$chaine*" : ‘* !.’

A. 10
B. 15
C. 5
D. 25

15. Le script suivant permet de : 16. le résultat d’exécution du programme


suivant :

A. chance2A
B. echance2
C. chance2A-2
A. afficher la liste des fichiers du répertoire / D. cha
accessibles en lecture
B. afficher la liste des fichiers du répertoire
/bin accessibles en exécution
C. afficher la liste des fichiers du répertoire
/bin accessibles en lecture et écriture.
D. afficher la liste des fichiers du répertoire /
accessibles en écriture.

Exercice 2 : ( 5points)
1. Remplir les espaces vides :
#!/bin/bash
# Déclaration d'un tableau d'entiers nommé tableau qui contient les valeurs suivants 10,
20, 30, 40, 50. (0,5pt)
tableau=( 10 20 30 40 50 )………………………………………………………….
# Fonction pour afficher le contenu du tableau (0,5pt)
afficher_tableau() {

echo "Contenu du tableau : ${tableau[*]}"

3
}

# Fonction pour déterminer la longueur du tableau (0,5pt)


longueur_tableau() {
echo "Longueur du tableau : ${#tableau[*]}"
}

# Fonction pour calculer la somme de tous les éléments du tableau (1pt)


somme_tableau() {
somme=0
for i in "${tableau[*]}"; do
somme=$((somme + i))

done
echo "Somme des éléments du tableau : $somme........................................"
}

# Fonction pour ajouter un élément au début du tableau. (0,5pt)


ajouter_debut() {
nouvel_element=$1
tableau=(nouvel_element ${tableau[*]})……………….
echo "Ajout de $nouvel_element au début du tableau."
}

# Fonction pour ajouter un élément à la fin du tableau. (0,75pt)


ajouter_fin() {
nouvel_element= $1……….. ;
tableau=(${#tableau[*]}=nouvel_element)………………….
echo "Ajout de $nouvel_element à la fin du tableau."
}

2. Comment faire l’appel de ces fonctions pour les cas suivants :


# Appel de la fonction ajouter_debut pour ajouter la valeur 5. (0,5pt)

ajouter_debut 5…………………………………………………………………

# Appel de la fonction ajouter_fin pour ajouter la valeur 60. (0,5pt)

ajouter_fin 60……………………………………

# Affichage du tableau mis à jour (0,25pt)

afficher_tableau

4
Nom et Prénom : …………………………………………………...
Classe : ………………………………………………….................... Code :

Exercice 3: ( 7points)

L’objectif de cet exercice est d’écrire un script Shell qui agit comme un gestionnaire de répertoires
simplifié nommé « Gestion_rep ». L'utilisateur devrait pouvoir naviguer dans les répertoires et
atteindre les fonctionnalités suivantes :

-a : Afficher le contenu du répertoire passé en argument.


-b : Afficher la liste des fichiers exécutables pour tous les utilisateurs dans le répertoire passé en
argument.
-c : Déplacer tous les sous répertoires qui dépassent la taille 100 ko dans le répertoire passé en
argument vers /tmp.
-d : compter le nombre de fichiers image d’extension « .jpeg» qui se trouve dans le répertoire passé
en argument.

1. Ecrire la fonction afficher_usage qui affiche dans la sortie standard l’usage du script comme
suit : (1pt)
USAGE : Gestion_rep : [-a] [-b] [-c] [-d] Répertoire
#! /bin/bash
#afficher_usage pour afficher l'usage du script
afficher_usage() {
echo " USAGE: $0 : [-a] [-b] [-c] [-d] Répertoire"
}
2. Compléter la création des fonctions appelées pour chaque option tapée (2pts)

#!/bin/bash
# Fonction pour afficher le contenu du répertoire passé en argument
afficher_contenu() {
if [ -d "$1" ]; then #tester que l’argument passé en paramètre est un répertoire. (0,125pts)
echo "Contenu du répertoire $1 :"
ls "$1" (0,25pts)
else
echo "Erreur: Le chemin spécifié n'est pas un répertoire valide."
Exit 1
fi
}
# Fonction pour afficher la liste des fichiers exécutables pour tous les utilisateurs dans le
répertoire passé en argument
afficher_executables() {
if [ -d "$1" ]; then #tester que l’argument passé en paramètre est un répertoire. (0,125pts)
echo "Fichiers exécutables dans le répertoire $1 :"
NE RIEN ECRIRE
find "$1" -type f –executable (0,5pt)

else
echo "Erreur: Le chemin spécifié n'est pas un répertoire valide."
exit 1
fi
}
5
# Fonction pour déplacer tous les sous-répertoires qui dépassent la taille de 100 ko vers /tmp
deplacer_grands_sous_repertoires() {
if [ -d "$1" ]; then
echo "Déplacement des sous-répertoires de plus de 100 ko dans $1 vers /tmp :"
a.find
Une"$1"
fois-type d -size +100k
le transfert -exec mv il{} a
est effectué, /tmp \; un (0,5pts)
reçu email pour la confirmation. Quels sont les
elseprotocoles de la couche application utilisés pour cette réception ? (0.25 pt)
echo "Erreur: Le chemin spécifié n'est pas un répertoire valide."
………………………………………………………………………………………………………………………..…………………………
exit 1
fi
2. Quelles sont les couches du modèle OSI qui ont le même rôle que la couche application du
}
modèle TCP/IP ? (0.25 pt)
# Fonction pour compter le nombre de fichiers image .jpeg dans le répertoire passé en
………………………………………………………………………………………………………………………………………………………
argument
compter_images_jpeg() {
if [ -d "$1" ]; then #tester que l’argument passé en paramètre est un répertoire. (0,125pts)
echo "Nombre de fichiers image .jpeg dans le répertoire $1 :"
find "$1" -type f -name "*.jpeg" | wc -l (0,25pts)
else
echo "Erreur: Le chemin spécifié n'est pas un répertoire valide."
exit 1 (0,125pts)
fi
}

3. Le script principal teste la présence d’au moins un argument, sinon il affiche l’usage sur la sortie
d’erreur et échoue. Puis exécute l’une des fonctions selon l’option donnée lors de l’exécution du
script. Compléter les champs manquants. (2,5pts)

if [ $# -eq 0 ] || ! `echo $1 | grep -q "-"` then #ligne 1


afficher_usage………………………………………(0,25pts)………………………..
…exit 1……………………………………………………………………………..
else
while
getopts ":a:b:c:d:" option…………………………………………………………………………
do
case $option in
a.) afficher_contenu ……………………. $OPTARG;;
b.) afficher_executables() ……………$OPTARG ……………….;;
c) deplacer_grands_sous_repertoires …$OPTARG …………………….;;
d) compter_images_jpeg …$OPTARG …….;;

*) echo "Option invalide …………………………………………………………………………;;


esac
done………………………………………………………………………………………………….
fi…………………………………………………………………………………………………

4. Expliquer la ligne 1 en se référant à l’annexe1 pour comprendre la commande grep –q : (0,5pts)


La ligne 1 vérifie si le nombre d'arguments est égal à 0 ou si le premier argument ne commence pas
par « - ». Dans ce cas, le script exécute la fonction afficher-usage. Sinon, il traite l'une des fonctions
en fonction de l'option donnée lors de l'exécution.

6
5. Donner la commande qui permet de compter à la fois tous les fichiers images d’extension
« .jpeg ». (0,25pt)
./Gestion_rep -d $1
6. Le résultat de la commande ls –l /home/esprit/rep2 est la suivante :

Donner les résultats de l’exécution des commandes suivantes : (0,75pt)

a. ./Gestion_rep -b /home/esprit/rep2 (0,25pt)


Fichiers exécutables dans le répertoire $1 :
file1 probleme……………. …
b. ./Gestion_rep -d /home/esprit/rep2 (0,25pt)
Nombre de fichiers image .jpeg dans le répertoire $1 :
2
c. ./Gestion_rep (0,25pt)
USAGE: Gestion_rep : [-a] [-b] [-c] [-d] Répertoire

Bon Travail

Annexe 1

La commande grep -q est utilisée pour rechercher un motif dans un fichier ou une entrée standard, mais
elle supprime la sortie normale. Au lieu d'afficher les lignes correspondantes, elle renvoie un statut de
sortie indiquant si le motif a été trouvé ou non.

Syntaxe :
grep - q [options] MOTIF [FICHIER...]
Options
 -q (quiet ou mode silencieux) : Supprime toute sortie normale. Seul le statut de sortie est défini.
 MOTIF : Le motif (chaîne de caractères ou expression régulière) à rechercher.
 FICHIER : Un ou plusieurs fichiers dans lesquels rechercher. Si aucun fichier n'est spécifié, grep lit
depuis l'entrée standard.
Statut de Sortie
 0 : Le motif a été trouvé.
 1 : Le motif n'a pas été trouvé.
 2 : Une erreur s'est produite (par exemple, fichier introuvable).

Vous aimerez peut-être aussi