Pb de script shell (KSH)

Top Page

Reply to this message
Author: Marc TERRIER
Date:  
To: guilde
Subject: Pb de script shell (KSH)
Bonjour,

J'ai un fichier texte de quelques centaines de lignes, contenant chacune
différents champs séparés par des ':'. Le premier champ est un nom de machine à
laquelle je dois passer une commande par rsh, et le deuxième champ un nom de
volume dont je souhaite récupérer la taille en Go.

Si je parcours mon fichier avec une boucle 'while ... do ... done', comme
celle-ci :

while read ligne ; do
[...]
machine=`echo $ligne | awk -F: '{ print $1 }'
volume=`echo $ligne | awk -F: '{ print $2 }'
resultat=`rsh ${machine} df -g ${volume}`
echo ${resultat}
[...]
done < FICHIER

ça ne marche que pour la première ligne du fichier, et ça s'arrête après. J'ai
d'abord cru que je ne revenais pas du 'rsh', mais en fait, le 'echo' affiche
bien quelque chose, donc tout se passe comme si la ligne "resultat=`rsh [...]`
faisait perdre les pédales à la boucle 'while', et que celle-ci, n'ayant plus
d'autres lignes à traiter, s'arrête.

J'ai essayé de remplacer le 'while' par un 'for', mais comme certains champs du
fichier contiennent des espaces, j'ai dû recourir à une bidouille peu élégante
qui consiste à remplacer les espaces par un autre caractère dans le 'for', puis
tout de suite après à faire la manip inverse :

for ligne in `cat FICHIER | sed 's/ /@/g'` ; do
ligne=`echo ${ligne} | sed 's/@/ /g'`
[...]
machine=`echo $ligne | awk -F: '{ print $1 }'
volume=`echo $ligne | awk -F: '{ print $2 }'
resultat=`rsh ${machine} df -g ${volume}`
echo ${resultat}
[...]
done

Là, ça marche, je traite bien toutes les lignes du fichier, mais les perfs s'en
ressentent pas mal. Est-ce que l'un d'entre vous aurait une meilleure solution à
me proposer ?

Merci d'avance.

--
Marc
Mail : marc.terrier [at] free.fr
Site : http://marc.terrier.free.fr