Année universitaire 2002-2003
espace

Licence d'informatique
Module 4 - partie "C / shell"



Travaux dirigés 14 :

  • 1. L'aiguillage à choix multiple en shell.
  • 2. La commande date.
  • 3. Exercice 1 : aiguillage à choix multiple.
  • 4. La structure de contrôle "boucle for" en shell.
  • 5. La structure de contrôle "boucle while" en shell.
  • 6. La structure de contrôle "boucle until" en shell.
  • 7. Sous-shell et shell fils.
  • 8. La commande head.
  • 9. La commande tail.
  • 10. Exercice 2 : lecture et réécriture d'un fichier.
  • 11. Exercice 3 : traduction.
  • 12. Exercice 4 : déplacement dans une arborescence.

  • 1. L'aiguillage à choix multiple en shell.

    Cette structure de contrôle permet d'effectuer un aiguillage conditionnel sur une liste de commandes, en fonction de la valeur d'une expression.

    Syntaxe :

    Dans ce modèle :

    Exemple :

    case $# in
    0)
    variable=`pwd`
    ;;
    1)
    variable=$1
    ;;
    *)
    echo "Erreur de syntaxe" ; exit
    ;;
    esac

    Remarque :

    2. La commande date.

    Caractéristiques :

    Syntaxe :

    Description :

    Exemple :

    Codes de retour :

    3. Exercice 1.

    Écrire un script permettant de convertir une date, renvoyée par la commande date, sous le format suivant (en français) :

    4. La structure de contrôle "boucle for" en shell.

    Cette structure de contrôle permet de lancer une liste de commandes en boucle.

    Syntaxe :

    Dans ce modèle, liste_de_cas est une liste de chaînes de caractères, utilisant éventuellement les métacaractères du shell.

    Exemple :

    for fichier in `ls *.c`
    do
    chmod go-r $fichier
    done

    Remarques :

    5. La structure de contrôle "boucle while" en shell.

    Cette structure de contrôle permet d'exécuter une séquence de commandes en boucle, tant qu'une condition est vérifiée.

    Syntaxe :

    6. La structure de contrôle "boucle until" en shell.

    Cette structure de contrôle permet d'exécuter une séquence de commandes jusqu'à ce qu'une condition devienne vraie.

    Syntaxe :

    7. Sous-shell et shell fils.

    7.1. Sous-shell.

    Une séquence de commandes placée entre parenthèses est exécutée dans un "sous-shell" du shell courant. De la même manière, chaque commande d'un branchement est exécutée dans un sous-shell du shell courant. Dans un sous-shell, on peut accéder aux valeurs des variables et des paramètres du shell courant. On peut également modifier ces valeurs, mais les modifications apportées ne seront pas répercutées à la fin de l'exécution du sous-shell. De manière équivalente, la valeur du répertoire courant du shell courant peut être modifiée, sans que cette modification perdure à la fin de l'exécution du sous-shell.

    Exemple 1 :

    $ pwd
    /users/linfg/linfg0
    $ a=1
    $ ( echo $a ; a=2 ; echo $a ; cd /usr/include ; pwd )
    1
    2
    /usr/include
    $ echo $a
    1
    $ pwd
    /users/linfg/linfg0
    $

    Exemple 2 :

    7.2. Shell fils.

    Lorsqu'on lance l'exécution d'un script ou qu'on tape la commande sh, on lance en fait un nouveau shell qui est appelé un "shell fils" du shell courant, qui de ce fait est appelé "shell père". Un shell fils diffère d'un sous-shell, dans la mesure où on ne peut pas accéder aux valeurs des variables et des paramètres du shell père. Pour une variable x du shell père, il est néanmoins possible de lancer la commande export x préalablement au lancement du shell fils, auquel cas la valeur de x sera connue dans le shell fils. En revanche, comme pour un sous-shell, les modifications éventuelles de la variable x ne seront pas répercutées dans le shell père (pas plus qu'une modification de la valeur du répertoire courant).

    Exemple :

    $ pwd
    /users/linfg/linfg0
    $ a=1
    $ export a
    $ sh
    $ echo $a ; a=2 ; echo $a ; cd /usr/include ; pwd
    1
    2
    /usr/include
    $ exit
    $ echo $a
    1
    $ pwd
    /users/linfg/linfg0
    $

    Remarque :

    8. La commande head.

    Caractéristiques :

    Syntaxe :

    Description :

    Exemple :

    Codes de retour :

    9. La commande tail.

    Caractéristiques :

    Syntaxe :

    Description :

    Exemple :

    Codes de retour :

    10. Exercice 2.

    Écrire un script affiche.sh qui lit soit un fichier dont le nom est passé en paramètre, soit le fichier /users/linfg/linfg0/welcome.html si le script est lancé sans paramètre. Le fichier concerné sera lu et affiché ligne par ligne, de deux manières différentes :

    Voici un exemple d'exécution de ce script :

    $ affiche.sh fich.txt
    Affichage en partant du début :
    <première ligne de fich.txt>
    <deuxième ligne de fich.txt>
    ...
    Affichage en partant de la fin :
    <dernière ligne de fich.txt>
    <avant-dernière ligne de fich.txt>
    ...
    $

    11. Exercice 3.

    Écrire un script qui effectue la traduction mot à mot d'un texte anglais en français. Le fichier f_anglais.txt contient le texte écrit en anglais. Le fichier f_français.txt contiendra la traduction. On dispose d'un fichier dico.txt, dont chaque ligne contient un mot en anglais, suivi d'un espace, suivi de la traduction de ce mot en français. On suppose que dico.txt permet la traduction de l'ensemble du vocabulaire utilisé dans f_anglais.txt.

    Exemple :


    f_anglais.txt

    my tailor is rich



    dico.txt

    is est
    my mon
    rich riche
    tailor tailleur




    f_français.txt

    mon tailleur est riche

    12. Exercice 4.

    Écrire un script interactif, permettant de naviguer dans une arborescence de fichiers et de répertoires, selon les spécifications suivantes :


    Ces pages ont été réalisées par A. Crouzil, J.D. Durou et Ph. Joly.
    Pour tout commentaire, envoyer un mail à crouzil@irit.fr, à durou@irit.fr ou à Philippe.Joly@irit.fr.