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.