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.
© Copyright 2025 ExpyDoc