Je vais recoller tout mon script je pense çà sera plus simple mais avant je vais expliqué ce que je dois faire,
voici l’énoncé :
<<Concevez, en Bash, un script rextract.sh permettant a ses utilisateurs de mettre en evidence des repertoires correspondant a des paquets R ainsi que leurs caracteristiques. Le script recoit en parametre un repertoire suppose contenir zero, un ou plusieurs repertoires representant des paquets R. Le repertoire passe en parametre ne peut lui-meme pas representer un tel paquet. Les repertoires representant un paquet R peuvent avoir le repertoire passe en parametre comme ancetre direct ou indirect.
Un repertoire representant un paquet R contient les fichiers texte non vides DESCRIPTION et NAMESPACE ainsi que les sous-repertoires R,data,demo,exec,man,po,src,tests,tools et vignettes. Chacun de ces sous-repertoires peut ne pas etre present, mais tout repertoire present parmi ceux listes ci-avant doit contenir au moins un chier. D'autres fichiers et repertoires peuvent egalement etre trouves, mais ils sont ignores de R.>>
Ensuite sur c'est paquet R je dois les traité, mais je souhaite tout d'abord repérer ces paquet R (je vérifie que les sous dossier R pour le moment) : voici mon script déja :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#!/bin/bash
#------------boucle qui stock les dossiers--------------------
parcour()
{
for item in $1/*
do
[ ! -d "$item" ] && continue
if checkR "$item"
then
echo "$item"
else
parcour "$item"
fi
done
}
#-------------------repere les paquet R----------------------
checkR()
{
[ ! -s "$1/NAMESPACE" ] && [ ! -s "$1/DESCRIPTION" ] && message="true" || message="false"
if [ -d "$1/R" ] && [ $message = "true" ]; then
shopt -s dotglob nullglob
fichiers=( "$1/R/"* )
(( ${#fichiers[@]} )) && message="false" || message="true"
shopt -u dotglob nullglob
fi
test "$message" = "true" && return 1 || return 0
}
#------------------------------------------------------------
#stock les paquet R dans un tableau
resultat=$(parcour $1)
for var in "${resultat[@]}"
do
echo "${var}"
done
#------------------------------------------------------------
exit |
dans cette condition
if [ -d "$1/R" ] && [ $message = "true" ]; then
lorsque je remplace true par false tout fonctionne, (je donne a mon script un repertoire qui contient 6 paquet R, un 7 eme que j'ai crée qui contients un fichier namespace et description non vide mais pas de paquet R, il me l'affiche, j'ai crée un dossier avec un namespace et description non vide mais un paquet R vide il me l'affiche aussi !! et quand je remplace le true avec false, il me l'affiche pas, normalement $message doit etre true, je comprend plus rien...
Partager