next up previous contents
Next: Exercices de programmation AWK Up: Examen Télécom 2 - Previous: Contents   Contents

Exercises de programmation KSH

Noubliez pas de commenter vos scripts ksh.

  1. Réalisez un script ksh qui affiche 10 lignes de 60 caractères `*'

    ..

      
    #!/usr/bin/ksh
    
    lignes_restantes=10
    while (( lignes_restantes-- > 0))
        do
        colonnes_restantes=60
        while (( colonnes_restantes-- > 0))
            do
            echo -n '*'  # pas de saut de ligne    
            done
        echo             # saut de ligne
        done
    
    ..

  2. Réaliser un script ksh qui recherche un mot dans le paramètre implicite d'environnement PATH (un mot correspond à une suite de caractères quelconques sauf `/'. Exemple:
    [fourmaux@hobbes] echo $PATH
    /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/ho
    me/fourmaux/bin:/sbin:/usr/sbin:/usr/local/sbin
    [fourmaux@hobbes] mot_dans_path sbin
    La chaîne 'sbin' est dans le paramètre PATH.
    [fourmaux@hobbes]
    

    ..

     
    #!/usr/bin/ksh
    # approche décomposant la chaine PATH... 
    # utilisation directe d'un motif dans le test plus simple
    
    chaine=$PATH
    while [[ $chaine != "" ]]
        do
        fin=${chaine##*/}   # recupération du dernier mot apres le dernier "/" 
                            # (longuest match)
        if  [[ $fin == $1 ]]
            then
            echo "La chaîne '$1' est dans le paramétre PATH"
            exit
        fi
        chaine=${chaine%[:/]*}  # recupération du debut de la chaine avant 
                                # le dernier ":" ou "/"(shortest match)
    done
    echo "La chaîne '$1' n'est pas dans le paramétre PATH"
    
    ..

  3. Réaliser un script ksh qui remplace, pour tout les fichiers du répertoire courant terminant par le premier argument, le suffixe donné en premier argument par le suffixe indiqué par le second argument. Exemple:
    [fourmaux@hobbes] ls
    l2ti.data   toto.tgz   titi.tgz   tutu.tar.gz
    [fourmaux@hobbes] remplace_suffixe .tgz .tar.tgz
    l2ti.tgz -> toto.tar.gz
    titi.tgz -> titi.tar.gz
    [fourmaux@hobbes] ls
    l2ti.data   toto.tar.gz   titi.tar.gz   tutu.tar.gz
    [fourmaux@hobbes]
    

    ..

     
    #!/usr/bin/ksh
    
    for suf_old in *
        do
        suf_less=${suf_old%$1}
        if [[ $suf_less != $suf_old ]]
            then
            suf_new="$suf_less$2"
            mv $suf_old $suf_new
            echo $suf_old '->' $suf_new
        fi
    done
    
    ..

  4. Réaliser un script ksh qui, à partir du chemin indiqué en premier argument, parcours tout les répertoires fils à la recherche du premier fichier dont le nom est fournis en second argument. Affiche le chemin en résultat. Exemple:
    [fourmaux@hobbes] recherche /usr/local l2ti.txt
    Le fichier 'l2ti.txt' à été trouvé dans le répertoi
    re '/usr/local/tmp/rep2/'.
    [fourmaux@hobbes]
    

    ..

     
    #!/usr/bin/ksh
    # Attention, pas prévu pour les bouclages a causes des liens syboliques
    
    search()
    {    
    for i in $1/*
        do
        if [ $i == "$1/$2" ]
            then echo "Le fichier '$2' à été trouvé dans le répertoire '$1'." 
            return
        elif [ -d $i ] 
            then search $i $2 
        fi
        done
    
    }
    
    search $1 $2
    
    ..



Olivier Fourmaux 2001-10-26