Vous êtes sur la page 1sur 3

# exercice 1 # Ecrire un script qui affiche le contenu de tous les fichiers # passes en parametre en precisant le nom de chaque fichier

avant # l'affichage de son contenu. (On ne se preoccupe pas du probleme de # defilement). ################################################ #! /bin/bash for fichier do echo "---------" echo "$fichier" echo "---------" cat "$fichier" # ou $fichier done ################################################ # exercice 2 # Ecrire un script qui copie tous les fichiers d'extension .txt du # repertoire courant en des fichiers de meme nom et # d'extension .txt.archive (toujours dans le repertoire courant). #! /bin/bash for fichier in *.txt do cp $fichier ${fichier}.archive done ################################################ # exercice 3 # Ecrire un script qui prend un nombre indetermine de parametres et # calcule leur somme. #!/bin/bash somme="0" while test "$1" != "" do somme=`expr $somme + $1` shift done echo $somme ################################################ # exercice 4 # Ecrire un script qui affiche pour chaque fichier du repertoire # courant une ligne de la forme nom_fichier taille. #!/bin/bash for fichier in .* * do set `ls -idl $fichier` echo "$fichier $6" done # exercice 5 # Ecrire un script qui boucle en demandant a l'utilisateur de saisir # deux variables, affiche leur somme, leur difference, leur produit et # leur quotient. Le programme s'arrete lorsque l'utilisateur saisit un # point. ################################################ ###################### #!/bin/bash

echo "Entrer deux entiers (point pour terminer)" read p1 while test "$p1" != "." do read p2 echo `expr $p1 + $p2` echo `expr $p1 - $p2` echo `expr $p1 \* $p2` echo `expr $p1 / $p2` echo "Entrer deux entiers (point pour terminer)" read p1 done ################################################ # exercice 6 # Ecrire un script qui prend un argument et en affiche la # factorielle. Verifier que le nombre de parametres est correct. #!/bin/bash if test $# -ne 1 then echo "il faut un argument" elif test $1 -eq 0 -o $1 -eq 1 then echo 1 else produit=2 n=$1 while test $n -ne 2 do produit=`expr $produit \* $n` n=`expr $n - 1` done echo $produit fi ################################################ # exercice 7 # Ecrire un script qui prend deux arguments et affiche # leur pgcd. Vrifier que le nombre de paramtres est correct. # Afficher un message specifique quand l'un des deux arguments. #!/bin/bash if test $# -ne 2 then echo "il faut deux arguments" elif test $1 -eq "0" -o $2 -eq "0" then echo "arguments nuls" else a=$1 b=$2 while test $a -ne $b do if test $a -gt $b then a=`expr $a - $b` else b=`expr $b - $a` fi done echo $a fi ################################################ # exercice 8 # Ecrire un script qui prend en argument des noms de # fichiers. Une option -v peut egalement etre placee parmi les

# arguments. Si l'option est presente, la commande affiche les # caracteristiques de chaque fichier et repertoire (format de ls -l # sans entrer afficher le contenu des repertoires). Si l'option # n'est pas presente, la commande renomme chacun des fichiers (ou # repertoires) en ajoutant l'extension .old. #!/bin/bash para="" option="" while test "$1" != "" do if test "$1" = "-v" then option="-v" else para="$para $1" fi shift done set $para if test "$option" = "-v" then while test "$1" != "" do echo `ls -ld $1` shift done else while test "$1" != "" do mv $1 ${1}.old shift done fi ################################################ # exercice 9 # Ecrire un script qui sort les valeurs successives de la suite # dfinie par : # u_n+1 = u_n /2 si u_n est pair, # 3 * u_n +1 si u_n est impair. # La valeur de u_0 est donne en argument, le programme s'arrte # lorsque la valeur afficher est 1. #! /bin/bash u0=$1 un=$u0 while test $un -ne 1 do echo $un if test `expr $un % 2` -eq 0 then un=`expr $un / 2` else un=`expr \( $un \* 3 \) + 1` fi done echo $un ################################################

# exercice 10 # Ecrire une commande jeter qui permet de manipuler une poubelle # de fichiers -- un rpertoire -- nomme poubelle et situe # votre racine. La commande accepte a trois options : # * jeter -l pour lister le contenu de la poubelle ; # * jeter -r pour vider la poubelle ; # * jeter fichier1 fichier2 ... pour dplacer les fichiers # considrs vers la poubelle. #! /bin/bash POUBELLE=$HOME/poubelle if test ! -d $POUBELLE then mkdir $POUBELLE fi case $1 in -l) echo "$POUBELLE :" ls $POUBELLE;; -r) echo "la poubelle se vide..." rm -r $POUBELLE/*;; *) mv $@ $POUBELLE;; esac ################################################ # Exercice 11 _Ecrire une commande qui prend en argument un nombre quelconque de noms de _chier et a_che pour chacun : { son nom si c'est un _chier r_egulier ex_ecutable ; { la liste des _chiers ex_ecutables qu'il contient si c'est un r_epertoire. Attention. Le script ne doit pas ^etre r_ecursif, a_n de d'obtenir un ordre d'a_chage < raisonnable >. Il ne s'agit en aucun cas d'explorer les sous-r_epertoires. ################################################ #!/bin/bash while test "$1" != "" do if test -x $1 -a -f $1 then echo $1 elif test -d $1 then for f in `ls $1` do if test -x $1/$f -a -f $1/$f then echo $1/$f fi done fi shift done ################################################ # Exercice 12 Ecrire une commande qui prend deux arguments, les bornes d'un intervalle, et qui a_che les valeurs du polyn^ome 2x +1 pour toutes les valeurs enti_eres situ_ees dans cet intervalle (borne inf_erieure comprise, borne sup_erieure excluse).

A_cher des messages sp_eci_ques si : { le nombre de param_etres est incorrect ; { les arguments ne sont pas des entiers ; { l'intervalle est incorrect. ################################################ #!/bin/bash if test $# -ne 2 then echo "nombre de parametres incorrecte" exit 2 fi expr $1 + $2 > /dev/null 2>/dev/null if test $? -eq 2 then echo "Parametres non entiers" exit 1 fi if test $1 -ge $2 then echo "Intervalle incorrect" exit 1 fi inf=$1 while test $inf -ne $2 do res=`expr 2 \* $inf + 1` echo $res inf=`expr $inf + 1` done ################################################ # exercice 13 # Ecrire une commande qui prend en argument un nombre quelconque de noms # de fichier et affiche pour chacun : # - son nom si c'est un fichier regulier non executable suivi de la # mention "est un fichier non executable", # - son nom si c'est un fichier regulier executable suivi de la # mention "est un fichier executable", # - la liste de tous les fichiers rguliers executables d'extension # ".truc" qu'il contient si c'est un repertoire #!/bin/bash while test "$1" != "" do if test -x $1 -a -f $1 then echo $1 "est un fichier executable" elif test -f $1 then echo $1 "est un fichier non executable" elif test -d $1 then for f in `ls $1/*.truc` do if test -x $f -a -f $f then echo $f fi

done fi shift Done ecrire un scrip list qui donne la liste des fichier dans le repertoire courant des repertoireres #!/bin/bash if [ $# -eq 0 ] then chemin=. fi if [ $# -eq 1 ] then chemin=$1 if [ ! -d $chemin ] then echo chemin invalide exit fi fi if [ $# -gt 1 ] then echo nombre d arguments invalide exit fi echo liste des fichiers : echo ==================== i=0 for f in $(ls $chemin); do if [ -f $chemin/$f ]; then echo $f i=$(expr $i + 1 ) fi done echo ==========================================Total : $i fichers echo liste des repertoires : echo ====================== i=0 for f in $(ls $chemin); do if [ -d $chemin/$f ]; then echo $f i=$( expr $i + 1 ) fi done echo ==========================================Total : $i repertoires