Exo sur le shell-script

Résolu/Fermé
fefstyle - 14 janv. 2008 à 00:26
 fefstyle - 14 janv. 2008 à 20:59
Bonjour,
J'ai un exercice mais la je sui svraiment bloqué car je ne l'ai pas compris! alors je vous pose le probleme !

Ecrire un shell-script "compare" qui compare le contenu de 2 repertoires.

Il commence par verifier qu'on lui passe bien 2 parametres
qui sont des repertoires.
Ensuite il va parcourir le premier et pour chaque element :
si cet element existe dans rep2
il regarde si il est un fichier :
Si oui il compare les contenus avec la commande cmp
sinon il dit que ce n'est pas un fichier et qu'il est dans rep2
ou que dans rep2 c'est un fichier etc ...
sinon il indique que cet element n'est pas dans rep2



#!/bin/sh
# version 1 de nettoie
if [ $# -ne 1 ]
then
echo "Utilisation : $0 nom_du_repertoire"
exit 1
fi
if ! test -d $1
then
echo "$1 n'est pas un repertoire !"
exit 2
fi
for f in `ls $1`
do
echo -e "Voulez vous supprimer $f [o/n] ? \c"
read rep
if [ "$rep" == "o" ]
then
rm $1/$f
fi
done





#!/bin/sh
# version 2 avec une fonction
function Quest_ON # param 1 = texte
{
while [ 0 ]
do
echo -e "$1 [o/n] ? \c"
read rep
if [ "$rep" = "o" ]
then
return 0
fi
if [ "$rep" = "n" ]
then
return 1
fi
echo "Repondre o ou n !!"
done
}


if [ $# -ne 1 ]
then
echo "Utilisation : $0 nom_du_repertoire"
exit 1
fi
if ! test -d $1
then
echo "$1 n'est pas un repertoire !"
exit 2
fi
for f in `ls $1`
do
if Quest_ON "Voulez-vous effacer $f"
then
if ! rm $1/$f 2>/dev/null
then
echo "Erreur lors de l'effacement de $f !!"
fi
fi
done






#!/bin/sh
if [ $# -ne 2 ]
then
echo "Utilisation : $0 rep1 rep2"
exit 1
fi
for r in $1 $2
do
if ! test -d $r
then
echo "$r n'est pas un repertoire !"
exit 2
fi
done
for f in `ls $1`
do
if test -e $2/$1
then # il existe dans rep2


else # pas dans rep2


fi
done



Voila le sujet est ce que quelquun pourrait me donner un coup de main
merci d'avance
A voir également:

3 réponses

toujours pas de réponse sniff je commence à désespérer
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
14 janv. 2008 à 19:05
Salut,

Si mais il y a beaucoup à faire et beaucoup à dire...

Voici quelques améliorations par rapport à ton script de base et quelques suggestions.

Il commence par verifier qu'on lui passe bien 2 parametres
if [ "$#" != 2 ]
then
echo "Utilisation : $0 repertoire_1 repertoire_2"
exit 1
fi


qui sont des repertoires.
if ! [ -d "$1" -a  -d "$2" ]
then
echo "Les deux arguments doivent être des répertoires"
exit 2 
fi


Suggestions :

Ensuite il va parcourir le premier et pour chaque element :
Si tu veux parcourir ton répertoire et récupérer chaque nom de fichier mieux vaut privilégier cette syntaxe :
for f in $1/* ; do basename "$f" ; done

L'idéal étant de récupérer chaque nom de fichier dans une variable pour pouvoir la comparer ensuite :
for f in $1/*
do file=$(basename "$f")
...
...
...
done


si cet element existe dans rep2
A insérer à la place des "..." ci-dessus
grep "$file" "$2"
retval=$?
if [ "$retval" = 0 ]
then
...


il regarde si il est un fichier :
if [ -f "$file" ]
then
...


Si oui il compare les contenus avec la commande cmp
else cmp "${1}${file}" "${2}${file}"
etc...
0
ah merci beaucoup jipicy pour l'aide que tu m'apporte je saisis maintenant merci beaucoup !
0