dd_pak a écrit :
Merci mon script et enfin fini, merci pour ton aide je crois pas que j'aurais reussi tout seul
Encore merci pour ton aide et tes explications
|
It's my job...
dd_pak a écrit :
# Affiche la date pour le log
DATE=`date +"%Hh%M"`
DATE2=`date +"%d/%m"`
echo "Lancé à $DATE le $DATE2" |
|
Petit danger: les variables en majuscules sont réservées au système. Imagine que, sans le savoir, tu aies utilisé la variable "PATH" ou "HOME" ??? Ben c'est pareil. Tu ne sais pas si le système n'utilise pas, pour lui, "DATE". Evidemment c'est improbable mais c'est pour le principe. Et puis un nom en minuscule est souvent plus lisible...
Sinon amélioration rapide:
# Affiche la date pour le log
echo "Lancé à `date +'%Hh%M'` le `date +'%d/%m'`" |
Petites remarques mineures
1) en général, une fonction est écrite en premier car on considère qu'on pourrait avoir à s'en servir de partout. Imagines que t'aies à t'en servir lors du renommage des fichiers zarbi, ben tu pourrais pas.
2) je ne comprends pas à quoi sert la variable "supp" dans ta fonction. Tu testes si elle est à "1" mais sinon tu ne fais rien. Autant ne pas appeler "old" si ce n'est pas utile. Par ailleurs, si vraiment ta fonction "old" devait recevoir un paramètre à "1", autant le lui passer directement comme paramètre justement et non pas par le biais d'une variable venue du dehors. Si dans ton code principale il te prend l'envie de modifier le nom "supp" en autre chose, faudra reporter cette modif dans la fonction !!!
3) je ne comprends pas trop pourquoi tu mets l'option "-l" dans ton "ls" ce qui t'oblige à mettre l'option "C" sinon t'aurais un affichage au format long. Autant faire un "ls -atr" ou, au pire, si t'es pas sûr de toi, un "ls -atr1" qui force l'affichage à n'être que sur une seule colonne...
4) une fonction ne travaille pas sur une copie des variables mais sur les variables elle-mêmes ça c'est très dangereux. Dans ta fonction "old" tu utilises les variables "$dossier" et "$supp" et "$file". Tu utilises aussi ces mêmes variables dans ton code principal.
Imagines que t'aies un truc de ce style
for $file in truc
do
old $file
<...>
traitement suivant sur $file
done |
Ben le passe par "old" a écrasé le "$file" par celui qui est dans "old". Et ton traitement suivant plante.
Pour éviter ce danger, toujours mettre ton code de fonction entre parenthèses - Ca ne change pas l'accès aux valeurs des variables mais ce ne sont que des copies et les originaux ne sont pas modifiés
old(){
(
dossier=$1
if test "$supp" == 1
then
# suppression du fichier le plus vieux
for file in `ls -atr $dossier`
do
#Exclusions du repertoire /bin, "." et ".."
if test "$file" == "bin" -o "$file" = "." -o "$file" = ".."
then
echo "Passage du dossier $file"
continue
fi
#test si c'est un repertoire
if test -d $dossier/$file
then
echo "$file est un répertoire, on entre dedans"
old $dossier/$file
fi
#si c'est un fichier on a gagne
if test -f $dossier/$file
then
echo "$file est un fichier, on le supprime car il est le plus vieux"
#commande de suppression
rm -f $dossier/$file
break
fi
#echo $dossier/$file
#break
done
fi
)
}
|
PS: Les accolades dans les corps des structures for/if/while ne sont pas obligatoires. Les mots clefs "then/else/fi/do/done" permettent au shell de se repérer dans le code. Sinon j'aime bien ton script. On sent que t'es à l'aise dans la syntaxe shell et t'as bien pigé la récursivité (ta fonction "old" qui s'appelle elle-même). Le reste viendra avec le temps...
Message édité par Sve@r le 21-03-2007 à 13:10:02
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.