Re: aide bash

トップ ページ

このメッセージに返信
著者: JLM aka cityhunter
日付:  
To: anne aublanc
CC: guilde
題目: Re: aide bash
anne aublanc a écrit :

>bonjour,
>
>J'ai ce code
>
>#!/bin/sh
>...
># read file for multicast
>if [ "${FAXNUMTOS}" != "" ] ; then
>    i=0
>    cat ${FAXLIST} | while read line   # read file line by line
>    do
>        NBRLIST[$i]=`echo $line | cut -d"|" -f1 `   # extract numéro fax 
>destinataire (obligatoire)
>        NAMEDEST[$i]=`echo $line | cut -d"|" -f2 `  # nom destinataire 
>(facultatif)
>        i=$(($i+1))
>        echo $i
>        echo ${NBRLIST[@]}
>    done
>    echo "--$i--"
>    i=$(($i-1))
>    echo "--${i}--"
>    echo "--${NBRLIST[@]}--"
>fi
>...

>
>résultat :
>+ i=0
>+ cat /tmp/listfax
>+ read line
>++ echo '123456||'
>++ cut '-d|' -f1
>+ NBRLIST[$i]=123456
>++ echo '123456||'
>++ cut '-d|' -f2
>+ NAMEDEST[$i]=
>+ i=1
>+ echo 1
>1
>+ echo 123456
>123456
>+ read line
>++ echo '987654321|titi|'
>++ cut '-d|' -f1
>+ NBRLIST[$i]=987654321
>++ echo '987654321|titi|'
>++ cut '-d|' -f2
>+ NAMEDEST[$i]=titi
>+ i=2
>+ echo 2
>2
>+ echo 123456 987654321
>123456 987654321
>+ read line
>+ echo --0--
>--0--
>+ i=-1
>+ echo ---1--
>---1--
>+ echo ----
>----
>
>Quand je sors de la boucle, y-a plus rien dans le tabeau et dans la variable
>i
>
>Si vous pouviez m'expliquer l'erreur!
>
>anne
>
>
>

ton problème vient d'un subshell :

cat ${FAXLIST} | while read line

le | invoque automatiquement un subshell
or les variables d'un subshell n'ont comme portée que le subshell


plus sérieusement :


NUMBERS=$( cat ${FAXLIST} | cut -d '|' -f 1 )
NAMEDEST=$( cast ${FAXLIST} | cut -d '|' -f 2 )


jlm@xyz:~$ cat > faxs <<EOF
 > 987654321|titi|
 > 123456|a|      
 > EOF

jlm@xyz:~$ export NUMBERS=$(cat faxs | cut -d '|' -f 1)
jlm@xyz:~$ export NAMEDEST=$(cat faxs | cut -d '|' -f 2)
jlm@xyz:~$ echo $NUMBERS
987654321 123456
jlm@xyz:~$ echo $NAMEDEST
titi a
jlm@xyz:~$


le problème en shell c'est qu'il ne faut pas penser de manière
"programmation linéaire" mais de la façon "groupe de fonctions"