:: Enseignements :: Licence :: L2 :: 2009-2010 :: Système ::
[LOGO]

Shell Unix


Exercice 1 - Navigation dans les répertoires

À l'aide de la commande ls :
  • donner le contenu de votre répertoire courant ;
  • réaliser l'affichage avec un nom de fichier par ligne (man ls) ;
  • afficher les fichiers cachés ;
  • afficher uniquement les noms de fichiers se terminant par .c.

Expliquer ce que fait la commande suivante :
ls -l | grep -v '^d'

Exercice 2 - Statistiques sur un fichier

À l'aide de la commande wc déterminer :
  • le nombre de lignes de votre projet du semestre précédent ;
  • la longueur de la plus longue ligne ;
  • le nombre de mots (uniquement).

À l'aide de la commande file déterminer :
  • le type du fichier (texte, image, etc.) ;
  • le format des données dans le cas de fichiers multimédias ;
  • Le système d'encodage dans le cas de fichiers de texte.

Exercice 3 - Chaînage de commandes

Il est possible grâce à un tube (symbole |) de chaîner plusieurs commandes. Déterminer avec les commandes ls et wc le nombre d'étudiants appartenant à la même filière que vous (utiliser le répertoire /home/).

Exercice 4 - Variables

Taper les commandes suivantes :
  • 					VAR="ls -l | grep -v '^d'"
    					echo $VAR
  • 					VAR=`ls -l | grep -v '^d'`
    					echo $VAR
  • 					VAR='ls -l | grep -v '^d''
    					echo $VAR
  • 					VAR=$(ls -l | grep -v '^d')
    					echo $VAR
Expliquer le résultat de ces différentes commandes.

Exercice 5 - Affichage des arguments d'un script

Pour tout savoir sur les commandes supportées par bash que vous pouvez utiliser dans vos scripts, nous vous recommandons vivement d'accorder une lecture attentive à la page d'aide obtenue avec man bash

Écrire un script qui affiche :
  • le premier argument passé au script ;
  • tous les arguments passés au script.

Exercice 6 - Récupération d'informations sur votre système

Écrire un script qui, à l'aide de la commande cat, détermine les informations suivantes (indication : utiliser les fichiers du répertoire /proc/) :
  • fréquence de votre processeur ;
  • quantité de mémoire vive.

Exercice 7 - Table de multiplication

Écrire un script qui affiche les tables de multiplication. Lorsque le script est lancé avec, par exemple, les arguments 5 et 10, il affichera le résultat suivant :
0 x 5 = 0
1 x 5 = 1
2 x 5 = 10
3 x 5 = 15
4 x 5 = 20
5 x 5 = 25
6 x 5 = 30
7 x 5 = 35
8 x 5 = 40
9 x 5 = 45
10 x 5 = 50

Exercice 8 - Liste des sous-répertoires

Écrire (sans utiliser find) un script qui affiche les noms de tous les sous-répertoires accessibles à partir d'un répertoire passé en argument du script. Penser à regarder les tests sur les répertoires proposés par bash.

Exercice 9 - Lecture sur l'entrée standard

Écrire un script qui permette de saisir un nom et un prénom, puis les affiche en sens inverse. Pour se faire, utiliser la commande read.

Exercice 10 - Exercice conditionnel

Écrire un script qui affiche si vous êtes :
  • à la racine de votre répertoire personnel ;
  • dans le répertoire /etc ;
  • dans le répertoire /bin ;

Les if en cascade ne sont pas toujours très lisibles, surtout lorsqu'il existe plusieurs conditions très similaires. Pallier à ce problème de lisibilité en utilisant l'instruction case.

Exercice 11 - While ou until

Écrire un script qui teste si un mot de passe saisi par l'utilisateur correspond au mot de passe spécifié « en clair » dans votre script. Utiliser tout d'abord l'instruction while puis l'instruction until. Quelle différence existe-t-il entre ces deux commandes ?

Exercice 12 - Taille d'un répertoire

Écrire un script size-rep.sh qui permette de connaître la taille d'un répertoire (c'est-à-dire la somme de la taille de tous ses fichiers) passé en argument. Malheureusement, ls -l et cut ne font pas bon ménage, car ls -l produit un nombre d'espaces variables entre les différentes colonnes. Pour connaître la taille d'un fichier, utiliser plutôt stat ou wc.

Version améliorée: inclure la taille de tous les sous-répertoires dans ce calcul. Un indice: les choses seront beaucoup plus simples si vous faites une fonction avec votre code précédent.

Exercice 13 - QCM

Écrire un script permettant de répondre à un formulaire à choix multiples. Malheureusement, de nombreux utilisateurs vont faire des fautes de frappes... Pour éviter de devoir réaliser de nombreux tests bien souvent illisibles, utiliser la commande select.
Note: tous ceux qui feront man select seront pendus jusqu'à ce que mort s'ensuive pour ne pas avoir compris la différence entre les commandes internes au bash et les commandes externes.

Exercice 14 - Un petit jeu

Écrire un script qui permette de dire à l'utilisateur s'il est proche (brûlant), éloigné (gelé), etc. d'un nombre mystère.

Exercice 15 - La commande find

Utiliser la commande find pour retrouver tous les fichiers de nom a.out, tous les fichiers dont le nom se termine par ~ et tous ceux dont le nom commence par #.

Écrire un script clean.sh qui supprime tous les fichiers trouvés avec la commande find précédente. Attention : on n'utilisera pas le symbole | pour effectuer cette action, mais uniquement les paramètres de la commande find. ATTENTION: si vous utilisez l'option de find qui permet de détruire des fichiers sans avoir lu et compris ce que raconte la page man, vous allez au devant d'une catastrophe. Donc, 1) lisez attentivement et 2) faites vos tests dans un sous-répertoire créé exprès, ne contenant aucun fichier dont la perte pourrait vous chagriner.

Exercice 16 - Variables d'environnements

  • Afficher toutes les variables d'environnements ;
  • Afficher toutes les variables d'environnements dont les valeurs associées contiennent le mot fr ;
  • Modifier la commande précédente pour n'afficher que les noms des variables concernées.

Exercice 17 - Le bashrc

À la racine de votre compte, ouvrir le fichier .bashrc. Ajouter des raccourcis qui permettent d'exécuter les commandes size-rep.sh et clean.sh quel que soit votre répertoire courant, en tapant simplement les commandes size-rep et clean.

Exercice 18 - Kill by name

À l'aide de la commande ps qui affiche la liste des processus, récupérer dans un script les identifiants de tous les processus vous appartenant et dont le nom est passé en argument, puis les terminer à l'aide de la commande kill. Attention, il n'est pas besoin de la commande cut, mais seulement des options de ps utilisées judicieusement, ainsi que d'un tout petit grep pour régler un petit détail.

Exercice 19 - Compression de projets

Écrire une commande qui, à l'aide des commandes find et zip, archive dans un fichier .zip uniquement les fichiers Makefile, .c et .h qui constituent un projet. Ajouter la possibilité de choisir la commande tar à la place de zip en invoquant votre script avec l'option -t.