Incrémenter nombre de variables

Fermé
sym59 Messages postés 40 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 11 août 2015 - 9 sept. 2013 à 16:36
sym59 Messages postés 40 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 11 août 2015 - 12 sept. 2013 à 14:46
Bonjour,

Savez-vous s'il est possible d'incrémenter le nombre de variables d'un bash?

Ca pourrait par exemple m'éviter de définir une centaine de variables qui se ressemblent beaucoup...

Voici une petite illustration (qui bien sure ne marche pas...)

#methode bete et mechante : 
adr_racine=$(echo "C:/Users/Desktop")
adr_1=$(echo "$adr_racine/$folder1")
adr_2=$(echo "$adr_1/$folder2")
adr_3=$(echo "$adr_2/$folder3")
...

#methode n°2

declare -i theEnd
declare -i n
declare -i m

theEnd=100

for n in theEnd
do
m=$(($n + 1))
adr_$m=$(echo "$adr_$n/$folder$m")

done


Je commence à nager dans mon code et c'est pour l'instant la solution la plus simple qui pourrait éventuellement m'aider, donc si quelqu'un sait comment m'aider... Ce serait cool =)

Merci !

3 réponses

sym59 Messages postés 40 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 11 août 2015
9 sept. 2013 à 17:59
J'imagine qu'il y a une méthode plus simple mais je ne vois vraiment pas...

Je cherche en faite à comparer deux répertoires. Pour celà, je souhaite naviguer dans chaque dossier et sous-dossier de ces deux répertoires et, dans chacun de ces dossiers, comparer les fichiers...

Pour créer les variables correspondantes aux répertoires, j'ai pensé à une fonction :


function mon_adresse()
{
if [ -n $dossier1 ]; then
adr_1=$(echo "$adr_racine/$1") #ce sera le 1er dossier à comparer

if [ -n $dossier2 ]; then
#adr_2 = sous-dossier niveau 1
adr_2=$(echo "$adr_1/$dossier2")

if [ -n $dossier3 ]; then
#adr_3 = sous-dossier niveau 2
adr_3=$(echo "$adr_2/$dossier3")

if [ -n $dossier4 ]; then
adr_4=$(echo "$adr_3/$dossier4")
#adr_4 = sous-dossier niveau 3
fi
fi
fi
fi
}

Mais elle se limite à 4 niveaux de sous-arborescence dans ce cas précis (9 dans la version longue) ...
Et c'est après que çà se gatte : 9 boucles imbriquées comme des poupées russes et des dizaines de commandes que je répète dans chaque boucle (qui pour moi, pourraient être évitée)
0
salut,

diff peut comparer le contenu de deux répertoires.

mais s'il s'agit de comparer le contenu des fichiers
si la hiérarchie de sous-répertoires est identique (les sous-répertoires portent le même nom) sous les deux répertoires principaux, tu peux faire une boucle for sur l'un d'eux en activant l'option globstar, et en utilisant **, et de comparer les fichiers avec diff (aussi)
0
sym59 Messages postés 40 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 11 août 2015
10 sept. 2013 à 10:18
salut Q*,

perso je préfère utiliser comm que diff pour les fichiers ; çà m'évite de devoir enlever les "<" et les ">" quand je veux réutiliser le résultat...

J'ai déjà une première version du fichier mais assez limitée :
elle permet de comparer les fichiers des deux répertoires "parents", les sous-dossiers et leurs fichiers.
Donc, si ces sous dossiers comportent à leur tour des dossiers, leur contenu ne peut pas être comparé... (C'est comme si le film inception était limité au rêve dans la camionnette =p)

Sinon tu peux m'aiguiller un peu plus sur le globstar et ** ? ce sont des options pour for ou pour diff?

Je ne peux pas compter sur man :
man diff --> No manual entry for "diff"
help diff --> No information on "diff"

je te remercie
0
globstar est une option de shopt (de bash), qui, si elle est activée, permet de descendre dans tous les sous-répertories.

ceci affichera les fichiers qui sont au même endroit sous les deux répertoires.
#!/bin/bash

racine=/chemin/vers
dossier1="dossier1"
dossier2="dossier2"
cherche="$racine/$dossier1"

shopt -s nullglob globstar

for f in "$cherche/"**/*
do
test -f "$f" && test -f "${f/"$dossier1"/$dossier2}" && echo "${f#$cherche/*} est dans les deux répertoires"
done
0
sym59 Messages postés 40 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 11 août 2015
12 sept. 2013 à 14:46
Salut Q*,

ta solution semble intéressante !

Je suis parti dans une toute autre direction dans mon petit script (j'essaie de contourner un probleme) et je ne vois pas encore comment je vais l'adapter mais je referais signe dès que ce sera le cas ;-)

merci
0