samedi 24 novembre 2018

Programation système (suite)

Exercice1: Ecrire le script shell qui permet d'afficher le nombre de mots dans la troisième ligne de chaque fichierdu répertoire courant

Solution:

for fich in *
do 
      echo le nb de mots dans $fich  est:
      head  -3 $fich | tail -1 | wc -w
done

Exercice2: Ecrire le script shell  qui permet d'afficher la somme des nombres de mots dans la troisième ligne de chaque fichier du répertoire courant

Solution:

s=0
for f in *
do
    x=`head -3 $f | tail -1 | wc -w `
    echo le nb de mots dans $f est : $x
    let    s=s+x
done
echo somme $s

Exercice 3: Ecrire le script shell qui permet de concaténer    f1   f2  f3  f4  F

Solution:

for i in $*
do
    k=$i
done

if   test -e $1 ; 
      then 
                If  test -r  $1 ; 
                        then 
                              exit 0
                       else
                               exit 2
               fi
               else
                       if  test -w `dirname $1`;
                       then
                             exit 0
                      else
                             if chmod u+w `dirmane $1`;
                       then   
                              exit 1
                       else
                              exit 3
                            fi


                       fi
while test $1 != $k
do
    cat $1  >> $k
    shift
done
for i in $*
do
    k=$i
done
while test $1 != $k
do
    cat $1  >> $k
    shift
Done
If  test $? -eq 1 ;
then
       chmod u+w `dirmane $k`
fi

Exercice 4: Ecrire le script shell qui permet de copier  f1  f2   g1  g2   h1   h2  f

Solution:

while test $2
do
    cp  $1   $2
    shift
    shift
done
if test $1
then
echo $1  non traité
fi

Exercice 5: Ecrire le script shell qui permet de supprimer les fichiers identiques dans le répertoire passé en paramètre

Solution:

cd $1
for  i in *
do
     if test -f $i
                then
                      for  j in *
                        do
                             if $i != $j
                                 then
                                     if   cmp   $i   $j
                                         then
                                                rm   $j
                                     fi
                              fi
                        done
     fi
done

Exercice 6: Ecrire le script shell qui permet de supprimer tous les fichiers en .o qui ont leur .c

Solution:

for prog in *.o
do
       if [ -f  `basename $prog    .o` .c ]
       then
               rm $prog
       fi
done


Exercice 7: Ecrire le script shell qui permet de chercher et d’afficher tous les sous répertoires,à partir d’un répertoire donné en second  argument, qui contiennent un fichier, donné en premier argument.

cherche         fichier.ext     /


Solution:

cd $2
if test –f $1
then
         echo le fichier $1 est dans le sous repertoire  `pwd`
fi
for i in *
do
       if test –d $i
       then
                     $HOME/cherche $1 $i
       fi
done
Cette commande aurait pu s’écrire en utilisant la commande find :
find    $2    –name    $1    -print


Programmation système (Script Shell)

Exercice1Réaliser les scripts shell suivants:


  1.        ./programme  1  a  b  c  d

1 a
1 b
1 c
1 d

Solution:

x= $1
shift
for i in $*
do
echo    $x   $i
done

2.         ./programme   cat  f1  f2  f3

Solution:

x= $1
shift
for i in $*
do
$x     $i
done

Exercice 2Recherche d’un mot dans une suite de fichiers, le mot et les fichiers sont passés en arguments.

./rech   ali    f1  f2  f3


1° solution :

Utilisation de :  grep
  ➔Fauxgrep   $1   $*                                                                       

2° solution :

mot= $1
shift
grep      $mot     $*

3° solution :

x=$1
shift
for f in $*
do
 grep $x   $f
done

Exercice 3 Sauvegarder tous les fichiers dont l’extension est c dans des fichiers appelés oldc et dont l’extension est le nom de ces fichiers. ex: ab.c    =>    oldc.ab.c

for  fich  in  *.c
do
cp    $fich     oldc.$fich
done

Comment rendre le « c » et oldc paramétrable

./programme  c  oldc
for  fich  in  *.$1
do
cp    $fich     $2.$fich
done

Exercice 4 : Afficher les fichiers passés en arguments

echo donner les fichiers à afficher
read x
for   f   in   $x
do
cat   $f
done


Exercice 5 : Afficher les 10 premières lignes des fichiers dont l’extension est c

Première solution :

head  -10  *.c   
Pb : pas de nom des fichiers

Deuxième solution :

for   prog   in *.c
do
echo les 10 premières lignes du fichier : $prog
head     -10     $prog
done

Comment rendre le  « c » et 10 paramétrables

./programme c 10

for   prog   in *.$1
do
echo les $1 premières lignes de $prog
head  -$2  $prog
done