|
|
|
|
Bonjour,
j'ai un probleme pour recupérer la valeur d'une variable en ksh : WTMP2
en gros, je fais un last que j'envoi dans une boucle.
pour chaque ligne du last, si ma condition est vérifiée, j'incremente la variable WTMP2 que j'exploite dans la suite de mon script
Comme on le voit dans l'exemple ci dessous, la valeur est parfaitement incrémentée à l'interieur du while. Par contre, des que l'on sort.....la variable reprend sa valeur initiale, 0.
C'est comme si la boucle partait dans un processus fils completement independant...
Une explication ?
merci pour vos retours.
Seb
#####################################
FIC=$1
VAR=$2
WTMP2=0
JOURS=`date +%_d`
last -f $FIC | grep -i $VAR | grep pts | grep -v wtmp | while read line
do
if [ `echo $line | awk '{ print $6 }'` -le $JOURS ]; then
(( WTMP2=$WTMP2+1 ))
fi
done
echo "${WTMP2}"
####################################
+ Wtmp2Cpt /var/log/wtmp.1 Sep
valeur boucle : 1
valeur boucle : 2
valeur boucle : 3
valeur boucle : 4
valeur boucle : 5
valeur boucle : 6
valeur boucle : 7
valeur boucle : 8
valeur boucle : 9
valeur boucle : 10
valeur boucle : 11
valeur : 0
Configuration: Windows XP Firefox 1.5.0.1
Salut,
do
if [ `echo $line | awk '{ print $6 }'` -le $JOURS ]; then
(( WTMP2=$WTMP2+1 ))
echo "valeur boucle : $WTMP2
fi
done
echo "valeur : ${WTMP2}" et là on verra peut être...
$ man woman Il n'y a pas de page de manuel pour woman. |
On obtient ce qui est présenté à la fin de mon premier post : on voit bien la valeur s'incrémenter dans la boucle while ( valeur boucle : <valeur> )
|
Effectivement, j'ai posté une version simplifiée du script. J'ai dégagé les echo "valeur boucle : $WTMP2" pour que ce soit plus lisible.
|
En me basant sur ton script et avec un fichier "fich" contenant le résultat de la commande "last -f ...", voilà ce que j'obtiens chez moi : [tmpfs]$ cat foo.ksh
#! /bin/ksh
WTMP2=0
JOURS=$(date +%_d)
while read line
do
if [ $(echo $line | awk '{ print $6 }') -le $JOURS ]; then
echo "Valeur boucle $WTMP2"
(( WTMP2=$WTMP2+1 ))
fi
done < fich
echo "Valeur finale boucle : ${WTMP2}"
[tmpfs]$ ./foo.ksh
Valeur boucle 0
Valeur boucle 1
Valeur boucle 2
Valeur boucle 3
Valeur boucle 4
Valeur boucle 5
Valeur boucle 6
Valeur boucle 7
Valeur boucle 8
Valeur boucle 9
Valeur boucle 10
Valeur finale boucle : 11
[tmpfs]$Bizarre que ça ne marche pas chez toi ;-\
$ man woman Il n'y a pas de page de manuel pour woman. |
Effectivement, c'est de cette manière que j'ai modifié mon script : je renvoi le resultat de la commande last dans un fichier que j'exploite par la suite, comme toi.
|
Effectivement, dans la 2nde forme, chaque commande est lancée dans un processus fils et de ce fait la dernière commande "echo $WTMP2" est héritée du shell père (celui qui a initialisé la variable) et non de celui qui a lu les lignes (while read).
#! /bin/ksh
#set -xv
WTMP2=0
JOURS=$(date +%_d)
cat fich | (while read line
do
if [ $(echo $line | awk '{ print $6 }') -le $JOURS ]; then
echo "Valeur boucle $WTMP2"
(( WTMP2=$WTMP2+1 ))
fi
done
echo "Valeur finale boucle : ${WTMP2}")
[tmpfs]$et là ça marche ;-))
$ man woman Il n'y a pas de page de manuel pour woman. |