ISIMA - 1e année - Systèmes d'exploitation
TP 1 – scripts shell sous Linux/Unix
Exercice 0.
0.1.
Quels sont les différents Linux/Unix sur lesquels
vous pouvez vous connecter en salle de TP ?
Pour chacun d'eux, déterminer quel shell est utilisé par défaut
et quelles sont les différences dans les variables d'environnement.
0.2.
Connectez-vous ensuite sur un Linux et ouvrez une fenêtre de terminal
qui restera ouverte durant tout le TP. Tous les scripts seront créés
dans votre dossier home.
0.3.
Avant de fermer votre session, assurez-vous qu'il n'y a aucun processus
indésirable encore en marche. Au besoin, détruisez-les.
Exercice 1.
1.1.
Créer un sous-dossier nommé partage
de votre dossier home.
Lancer un éditeur de texte et écrire deux lignes de
texte contenant chacune nom, prénom, numéro de dossier et adresse mail
de chaque équipier ;
les items d'une ligne seront séparés par des points-virgules.
Enregistrer ce fichier texte sous le nom info.txt
dans le dossier
partage
. Laisser les droits en lecture pour tous pour ce fichier.
N.B. régler en conséquence les droits sur le dossier partage
.
1.2.
Que donne la commande cut -d";" -f1,2 ~/partage/info.txt
?
Créer un script extraire.sh
qui affiche les mails du fichier
info.txt
.
1.3. Comme séparateur, pourrait-on utiliser à la place des points-virgules
des espaces ? des tabulations ? des points ?
Exercice 2.
2.1.
Créer un script quatre.sh
contenant :
#!/bin/sh
LISTE="un deux trois quatre"
echo $LISTE
for i in $LISTE
do
echo $i
done
Exécuter ce script. Que fait-il ?
2.2.
Créer un script combien.sh
contenant :
#!/bin/sh
cd ~
c=`ls ../ | wc -l`
echo "$c utilisateurs"
Exécuter ce scripts. Que fait-il ?
2.3.
Créer un script utiliste.sh
qui affiche la liste
des utilisateurs ayant un compte sur le même Linux, puis leur
nombre.
2.4.
Que se passe-t-il si pour la question 2.2. la troisième ligne est :
c=`ls ../* | wc -l`
Comment pourrait-on transformer cette commande pour obtenir les mêmes
résultats qu'en 2.2. et 2.3. ?
Exercice 3.
3.1.
Modifier le script utiliste.sh
pour que la liste
des utilisateurs soit enregistrée dans un fichier utilisateurs.txt
,
avec un login par ligne.
3.2..
Créer un script fouiller.sh
qui, pour chacun de ces utilisateurs,
vérifie qu'il existe bien un dossier partage
et qu'il contient
bien un fichier info.txt
ouvert en lecture.
3.3.
Créer un script chercher.sh
qui recherche dans le fichier
utilisateurs.txt
votre nom d'utilisateur (placé dans une variable
nommée nom
).
3.4.
Modifier ce script pour que le nom d'utilisateur recherché soit donné en paramètre du script.
Exercice 4. (sort, uniq, wc)
4.1.
Ecrire un script trier.sh
qui trie les arguments en ligne de
commande et les affiche. Modifier ce script pour qu'il supprime aussi les
doublons.
4.2.
Ecrire un script dico.sh
qui trie par ordre lexicographique
les mots du fichier MarkTwain.txt
et supprime les doublons. Le résultat
sera placé dans un fichier dico.txt
.
Comment pourrait-on indiquer dans le fichier créé le nombre d'occurrence
de chaque mot dans le texte source ? ne retenir que les mots présents
plus de dix fois ?
4.3.
Ecrire un script ajouter1.sh
qui ajoutent
au fichier utilisateurs.txt
un nom d'utilisateur
passé en paramètre. Le nom est ajouté à la fin du fichier.
4.4.
Même question avec ajouter2.sh
mais le nom est ajouté
à sa place dans l'ordre lexicographique.
4.5.
Ecrire un script modifier.sh
qui remplace dans le
fichier utilisateurs.txt
un nom d'utilisateur
par un autre, tous deux passés en paramètre. Le nouveau nom
sera ajouté à sa place dans l'ordre lexicographique.
N.B. On peut créer un fichier temporaire et utiliser la variable
$$ qui donne le numéro du processus courant.
Exemple :
TMP="~/tmp.$$"
echo "Blabla" > $TMP
echo "Blibli" >> $TMP
rm $TMP
Exercice 5.
Regarder le contenu des fichiers de configuration de votre environnement
(s'ils existent) :
.login (démarrage d'une session),
.xinitrc (démarrage d'une session X window),
.bashrc (lancement du shell bash), ou .cshrc, ou ...,
.logout (fermeture de session).
Ajouter où il faut les instructions permettant de :
5.1. Créer un alias "lsa" listant tous les fichiers d'un dossier.
5.2. Effacer tous les fichiers .tmp de votre dossier HOME en fin de session.
5.3. Effacer tous les exécutables de votre dossier bin avant d'ouvrir un terminal.
N.B. conserver une copie des fichiers originaux pour annuler vos transformations si nécessaire.