Bonjour à tous,
Je me trouve confronté à un petit problème de gestion de mes variables dans un shell script.
Le but de ce script est de lancer des commandes rsync.
Tout d'abord, sachez que j'utilise le shell "normal" (/bin/sh).
#!/bin/sh
Ensuite, je définis 3 variables que j'exporte
PATH_SOURCE="/opt"
PATH_DESTINATION="/opt/destination"
export PATH_SOURCE PATH_DESTINATION_1 PATH_DESTINATION_2
Ensuite, je définis d'autres variables, qui sont en fait, une concatenation des 3 variables précédentes, que j'exporte également
PSRC1="$PATH_SOURCE/dir1/dir2/dir3"
PDST1="$PATH_DESTINATION_1/dir1/dir2/dir3"
PSRC2="$PATH_SOURCE/dir4/dir5"
PDST2="$PATH_DESTINATION_1/dir4/dir5"
PSRC3="$PATH_SOURCE/dir6/dir7/dir8"
PDST3="$PATH_DESTINATION_1/dir6/dir7/dir8"
PSRC4="$PATH_SOURCE/dir9"
PDST4="$PATH_DESTINATION_1/dir9"
PSRC5="$PATH_SOURCE/dir1/dir4/dir3"
PDST5="$PATH_DESTINATION_1/dir1/dir4/dir3"
export PSRC1 PDST1 PSRC2 PDST2 PSRC3 PDST3 PSRC4 PDST4 PSRC5 PDST5
Pour l'instant, je lance, une à une les commandes rsync
rsync -crtvz --delete -e "ssh -i key_id_dsa" $PSRC1 MonUserDistant@MaMachineDistante:$PDST1
rsync -crtvz --delete -e "ssh -i key_id_dsa" $PSRC2 MonUserDistant@MaMachineDistante:$PDST2
rsync -crtvz --delete -e "ssh -i key_id_dsa" $PSRC3 MonUserDistant@MaMachineDistante:$PDST3
rsync -crtvz --delete -e "ssh -i key_id_dsa" $PSRC4 MonUserDistant@MaMachineDistante:$PDST4
rsync -crtvz --delete -e "ssh -i key_id_dsa" $PSRC5 MonUserDistant@MaMachineDistante:$PDST5
Ceci est une bribe de script, le script reel est bien plus important et devient ingérable du fait de sa longueur excessive.
J'en viens donc à ma question :
Comment faire pour utiliser des variables de remplacement dans une boucle for (par exemple), sachant que que je veux récupérer le
contenu des variables associées au $i parcouru dans la boucle for ... mais je n'y parviens pas :(
For i in 1 2 3 4 5; do
#echo $i
#echo PSRC$i
#echo `PSRC$i`
rsync -crtvz --delete -e "ssh -i key_id_dsa" $PSRC$i MonUserDistant@MaMachineDistante:$PDST$i
done
D'avance un grand merci de votre aide (précieuse)
# eval ?
Posté par tgl . Évalué à 4.
% cat /tmp/eval.sh
#!/bin/sh
plop_1="plip"
plop_2="plup"
for i in 1 2 ; do eval echo \"\$plop_$i\" ; done
% /tmp/eval.sh
plip
plup
En gros, ça ajoute une passe d'évaluation à ta commande, donc avec i=1, \$plop_$i devient $plop_1 et \"\$plop_$i\" devient "$plop_1".
Reste à voir si c'est du Bourne de base ou du Bash, je ne me souviens plus...
# un tableau ?
Posté par solsTiCe (site web personnel) . Évalué à 2.
PSRC=("$PATH_DESTINATION_1/dir1/dir2/dir3" "$PATH_SOURCE/dir4/dir5")
for i in `seq ${PSRC[*]}`
do
truc ${PSRC[$i]}
done
[^] # Re: un tableau ?
Posté par solsTiCe (site web personnel) . Évalué à 2.
longueur du tableau == ${#PSRC[*]}
[^] # Re: un tableau ?
Posté par solsTiCe (site web personnel) . Évalué à 1.
les indices des tableaux commencent à zéro
[^] # Re: un tableau ?
Posté par tgl . Évalué à 4.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.