Signaler

Exo sur le shell-script [Résolu/Fermé]

Posez votre question fefstyle - Dernière réponse le 14 janv. 2008 à 20:59 par fefstyle
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
Utile
+0
plus moins
toujours pas de réponse sniff je commence à désespérer
Utile
+0
plus moins
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...
Utile
+0
plus moins
ah merci beaucoup jipicy pour l'aide que tu m'apporte je saisis maintenant merci beaucoup !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !