TP Shell Fichier - Moodle INSA Rouen

publicité
Système d'exploitation
Travaux pratiques
1 Découverte du shell
Le shell (ou interpréteur de commandes) est l'interface (texte) entre l'utilisateur et le système d'exploitation. Il existe plusieurs shells différents sous Unix (Bourne­shell : sh , C­shell : csh , Korn­
shell : ksh , Bourne Again shell : bash , ...). Le shell a pour rôle de traduire les commandes saisies par l'utilisateur pour que le système les exécute.
Lorsque vous vous connectez, le fichier /etc/passwd indique à l'ordinateur le shell que vous utiliserez par défaut (Bash). (ou via l'annuaire LDAP)
L'ordinateur va ensuite consulter plusieurs fichiers de configuration qui dépendent de ce shell. Dans le cas de Bash, ces fichiers sont (par ordre de consultation) :
− .bash_profile (exécuté seulement à la connexion)
− .bashrc (exécuté au lancement de chaque shell)
Ces 2 fichiers sont des fichiers situés chez vous, mais ils appellent des fichiers de configuration standards.  Regarder et expliquez le contenu de ces différents fichiers...
 expliquez la commande alias et donnez la commande permettant d'enlevez un alias
 profitez­en pour rajouter à l'endroit adéquat les alias que vous désirez utiliser !
Outre la définition d'alias, ces fichiers de configuration définissent aussi des variables qui vous sont propres. Ce sont les variables d'environnement (Elles sont reconnaissables par leur nom en majuscule). La commande set vous permet d'obtenir toutes les variables d'environnement définies actuellement et leur valeur.
 Essayer de reconnaître quelques variables d'environnement
Vous pouvez aussi :
− afficher la valeur d'une variable d'environnement précise en tapant :
echo $VARIABLE
− modifier certaines variables d'environnement : VARIABLE=nouv_valeur
 Afficher la valeur actuelle de la variable PS1 et utiliser le manuel Unix pour reconnaître les différentes valeurs. À vous ensuite de les modifier pour obtenir le prompt de votre choix (commencer par les modifier sur la ligne de commande, puis lorsque vous aurez trouvé le bon, changez la ligne correspondante dans le bon fichier de configuration.)!
2 Programmation en shell
Le shell n'est pas qu'un simple interpréteur de commande, c'est aussi un langage de programmation. Il est possible d'écrire une série d'instructions shell dans un fichier (un script) et d'exécuter ce script. Chaque shell possède sa propre syntaxe en ce qui concerne les affectations, instructions de boucles, etc… 2.a. Votre premier script écrit en Bash :
#!/bin/bash
# mon premier script
clear
while :
do
echo 'Menu'
echo '[1] Affichage repertoire courant'
echo '[2] Liste des fichiers du repertoire'
echo '[3] Information sur un fichier'
echo '[4] Changement de repertoire'
echo '[5] n premieres lignes d''un fichier'
echo '[0] Fin'
echo 'Choix:'
read ch
case $ch in
0) exit 0
;;
1) pwd
;;
2) ls
;;
3) echo -n 'Nom du fichier:' ; read file ; ls -l $file
;;
4) echo -n 'Nouveau repertoire:' ; read rep ; cd $rep
;;
5) echo -n 'Nom du fichier:'; read file
echo -n 'Nb de lignes a afficher:' ; read n
head -$n $file
;;
*) echo 'choix non propose'
esac
done
 À l'aide d'emacs saisir ce programme en le sauvant sous le nom script1.
Pour l'exécuter (en mode "deboguage") tapez : bash -x script1
Profitez­en pour comprendre ce que fait chaque instruction et sa syntaxe (chaque caractère a son importance).
2.b. Passage de paramètres :
Un script peut accepter des arguments en entrée grâce à des "pseudo" variables $1, $2, …  À quoi correspond $0 ? Citez d'autres pseudo variables du type $X de bash
 Écrire un script qui concaténe puis trie deux fichiers f1 et f2 dans un nouveau fichier f3. Les noms des 3 fichiers sont passés en paramètre du script.
2.c. Test
Il est aussi possible de faire des tests dans un script, pour comparer des variables, ou pour tester certaines de leurs caractéristiques.
 Faire un man test (ou un man bash) pour consulter les différents tests possibles puis écrire les scripts suivants :
− exist : script qui vérifie l'existence dans le répertoire courant du fichier dont le nom est passé en paramètre
− typ : script qui indique si le nom passé en paramètre est un fichier ou un répertoire
3 Changement d'extensions
 Quel est le résultat de echo "debut $(ls) fin", expliquez le rôle de $(commande)
Tapez le code suivant :
for fichier in *; do echo $fichier ; done
 Écrire un script (renomme) prenant en entrée 2 extensions et qui renomme chaque fichier du répertoire courant ayant l'extension 1 avec l'extension 2:
renomme doc odt
Téléchargement