sujet 12

Université de Nice-Sophia Antipolis
Licence Mathématiques - MASS
Semestre 1
Semaine du 8 décembre 2014
Systèmes Informatiques
Travaux Pratiques – Séance n◦ 12
1
Objectif du TP
Ce TP va récapituler des notions estimées minimales au maniement d’un système d’exploitation (digne de ce nom).
1) Créez le répertoire ~/SI/TP12 et faites-en votre répertoire courant. Enregistrez-y l’archive
comprimée (fichier de suffixe .tar.gz) qui se situe sur la page web du cours et qui contient les
scripts du TP à comprendre. En la désarchivant vous devez obtenir 7 fichiers de suffixe .sh.
2) Grâce à a2ps, « imprimez » ces 7 fichiers dans un fichier PostScript 1 de nom scripts.ps :
a2ps *.sh -o scripts.ps
Visionnez ce fichier grâce à l’utilitaire evince
Ajoutez maintenant l’option -Afill à la commande a2ps. Voyez la différence. Transformez
avec ps2pdf le fichier PostScript en un fichier de codage PDF 2 . Visionnez-le grâce à xpdf ou
evince :
ps2pdf scripts.ps; xpdf scripts.pdf&
3) Déplacez maintenant tous les fichiers de suffixe .sh dans le répertoire ~/bin. Modifiez les
permissions d’exécution de chaque script. Ainsi, pour en exécuter un, vous pouvez être dans
n’importe quel répertoire, puisque la variable PATH de votre environnement contient votre répertoire ~/bin (tapez echo $PATH pour vous en convaincre).
2
L’instruction if
if [[ expression1 ]] then
commandes1
elif [[ expression2 ]] then
commandes2
elif [[ expression3 ]] then
commandes3
...
else commandes
fi
1. Le PostScript est un langage de programmation spécialisé dans la description de page, mis au point par la société Adobe Systems. Ce langage de description de page proposé en 1984 est très utilisé (souvent en émulation) par les
imprimantes laser.
2. PDF, qui signifie Portable Document Format (traduit littéralement par codage de documents transportable), est
un codage de fichier informatique créé par la société Adobe Systems. Il est à noter que c’est un codage ouvert : ses
spécifications sont publiques et utilisables librement (certains éléments sont à disposition sur le site Adobe). Il est dérivé
du codage PostScript.
2
4) Cherchez à comprendre le fonctionnement du script id.sh (dont le code suit), sans l’exécuter.
Vérifiez son comportement en le testant sur machine.
# !/ bin / zsh
if [[ $ # - eq 0 ]] then
print Veuillez décliner votre identité - Merci .
elif [[ $1 == " $ ( whoami ) " ]] then
print Bonjour Maitre
elif [[ $ ( finger $1 | grep Login | cut -d " : " -f 1) == " L o g i n " ]] then
print " J e ne v o u s c o n n a i s p a s m a i s "
print " v o u s e t e s un u t i l i s a t e u r d e c e s y s t è m e "
else
print -n " J e ne v o u s d i s p a s b o n j o u r , "
print " mon M a i t r e e s t $ ( whoami ) . "
print " Vous n ' a v e z a u c u n d r o i t s u r c e s y s t è m e ! "
fi
5) Écrivez un script colonnes.sh qui admet quatre paramètres : un nom de fichier ordinaire,
un caractère et deux entiers n1 et n2 tels que le premier soit inférieur ou égal au second. Le
caractère sert de délimiteur entre les colonnes du fichier. Le rôle de ce script est d’afficher, sur la
sortie standard, les colonnes du fichier dont le numéro est compris entre n1 et n2 . Si les paramètres
ne sont pas conformes, vous afficherez un message d’erreur.
3
L’instruction while
while expression
do
commandes
done
6) Rappel : Cherchez à comprendre le fonctionnement du script nombres.sh (dont le code
suit), sans l’exécuter. Vérifiez son comportement en le testant sur machine.
# !/ bin / zsh
number =0
while [[ $number - lt 10 ]] do
print -n $number
number = $ ( expr $number + 1)
done
print
La commande expr permet d’évaluer des expressions arithmétiques 3 . Consultez la page de
manuel de cette commande.
a. Modifiez le script afin qu’il affiche les entiers compris entre 0 et le nombre passé en paramètre
(10 par défaut) séparés par un blanc.
3. zsh accepte aussi la notation $(($e)) comme équivalent de $(expr $e).
3
7) Cherchez à comprendre le fonctionnement du script nb.sh (dont le code suit), sans l’exécuter. Vérifiez son comportement en le testant sur machine.
# !/ bin / zsh
print -n " e n t r e z un nombre : "
read nb ;
number =1
while [[ $nb - gt 0 ]] do
number = $ (( $number * 2 ))
nb = $ (( $nb -1 ))
done
print " $number "
a. Modifier le script pour que l’utilisateur ne rentre pas un nombre qui dépasse la capacité de
calcul du script. Quel est ce nombre ?
4
L’instruction for
for var in ch_1 ch_2 ... ch_n
do
commandes
done
8) Écrivez un script fichiers.sh qui liste uniquement les fichiers ordinaires (et non les répertoires) du répertoire courant. À l’aide de l’énoncé for, vous parcourez tous les fichiers du répertoire et vous testez, pour chacun, s’il est ordinaire ou pas. Dans l’affirmative, vous affichez son
nom.
9) Écrivez un nouveau script liste.sh qui prend un nom de fichier en paramètre et qui affiche
la liste des mots contenus dans le fichier.
10) Écrivez un autre script contenu_fichiers.sh qui prend n paramètres qui sont des fichiers
et qui utilise le script précédent pour afficher le contenu de ces fichiers.
5
L’instruction case
case chaine in
motif_1 ) commandes_1 ;;
motif_2 ) commandes_2 ;;
...
motif_n ) commandes_n ;;
esac
Remarque : chaine peut être un chiffre, une lettre, un mot ou des variables spéciales.
11) Cherchez à comprendre le fonctionnement du script param.sh (dont le code suit), sans
l’exécuter. Vérifiez son comportement en le testant sur machine.
# !/ bin / zsh
case
0)
1)
2)
*)
esac
$ # in
print $0
print $0
print $0
print $0
est sans paramètre ;;
possède un paramètre : $1 ;;
possède deux paramètres : $1 et $2 ;;
possède plus de deux paramètres : $ *;;
12) Cherchez à comprendre le fonctionnement du script animal.sh (dont le code suit), sans
l’exécuter. Vérifiez son comportement en le testant sur machine.
4
# !/ bin / zsh
print -n " E n t r e z l e nom d ' un a n i m a l : "
read ANIMAL
print -n " l e $ANIMAL a "
case $ANIMAL in
cheval | chien | chat ) print -n " q u a t r e " ;;
homme | kangourou ) print -n " d e u x " ;;
*) print -n " un nombre i n c o n n u de " ;;
esac
print " p a t t e s . "
13) Écrivez un script calculette.sh qui demande à l’utilisateur d’entrer deux nombres entiers et un opérateur arithmétique (parmi + − ∗ et /) et qui affiche le résultat de l’opération.
6
L’instruction until
until expression
do
commandes
done
14) Cherchez à comprendre le fonctionnement du script secret.sh (dont le code suit), sans
l’exécuter. Vérifiez son comportement en le testant sur machine.
# !/ bin / zsh
secretname = ' monpassword '
name = ' noname '
print ' Essayez de trouvez le mot secret ! '
print
until [[ $name == $secretname ]]
do
print -n ' Faites votre choix : '
read name
done
print ' TRÈS BIEN !!! '
15) Cherchez à comprendre le fonctionnement du script sleep.sh (dont le code suit), sans
l’exécuter. Vérifiez son comportement en le testant sur machine.
# !/ bin / zsh
echo " J e t e r m i n e comment ?\ n . . . T r o u v e v i t e
until [[ -f foo ]]
do
sleep 4
echo " . . . ah ah . . . j ' a t t e n d s . . . "
ps
done
echo "OUF , t u a s e n f i n c o m p r i s ! "
exit 0
..."
Indication : lancer ce script en arrière plan puis la commande appropriée ...
7
Récapitulatif du semestre
Vous devez maintenant :
— avoir compris le langage du Shell, et comment il est interprété ;
5
— savoir naviguer dans les différents répertoires (donc avoir une hiérarchie significative et
compréhensible) ;
— rendre (in)accessibles certains fichiers ou répertoires (chmod) ;
— vous connecter sans problème sur une machine autre que le PC sur lequel vous êtes connecté ;
— exécuter des programmes sur une autre machine depuis le PC sur lequel vous êtes connecté ;
— imprimer n’importe quelle sorte de fichiers ;
— regarder le contenu de n’importe quel fichier (emacs, more, etc.) ;
— connaître la différence entre des processus qui s’exécutent en tâche de fond (background)
et ceux exécutés au premier plan (foreground).
— avoir une culture générale relative à Linux et au logiciel libre.