Rechercher : dans
Par :

Exo sur le shell-script

Dernière réponse le 14 déc 2008 à 16:26:59 fefstyle, le 14 jan 2008 à 00:26:23 
 Signaler ce message aux modérateurs

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

Configuration: Linux
Firefox 2.0.0.6

Meilleures réponses pour « exo sur le shell script » dans :
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...
Guide d'utilisation du Shell pour débutant VoirSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface...
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...

1

fefstyle, le 14 jan 2008 à 18:47:27

Toujours pas de réponse sniff je commence à désespérer

Répondre à fefstyle

2

jipicy, le 14 jan 2008 à 19:05:36

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...

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

3

 fefstyle, le 14 jan 2008 à 20:59:56

Ah merci beaucoup jipicy pour l'aide que tu m'apporte je saisis maintenant merci beaucoup !

Répondre à fefstyle