2014-03-28 28 views
1

我想知道它在哪裏更改計數器變量,我用它來計算文件中包含的郵​​件地址,當我打印出循環時,值從終端消失,另一方面,如果打印在週期內,該值是正確的。所以,我不明白的地方的值丟失,因爲當你使用|你fork一個新的子shell,我必須打印出來的循環,因爲它是正確的計數器變量的值是多少? linux -bash

cat $FILENAME_2 | while read LINE 
do 
    if [ "$LINE" = "" ] 
    then 
    echo "blanks" 
    exit 1 
    fi 
    TEST=${LINE:0:1} 
//verify string start with #  
    if [ "$TEST" != "#" ] ; then 
    let CONTADOR=CONTADOR+1 
    cat html_list | mail -a "Content-type:text/html" -s "$ASUNTO" $LINE 
    echo "Mail enviado a $LINE" 
    fi 
echo "i send $CONTADOR mails" //print mails count 
done 
echo "i send $CONTADOR mails" // print blank space 
+0

我看不到變量的範圍。你能粘貼整個代碼嗎?否則,請檢查$ CONTADOR是否在done命令後無法訪問的區域內聲明。 –

+0

http://pastebin.com/rq13yRpT – santiago92

+0

可能重複[無法添加元素到bash中的數組](http://stackoverflow.com/questions/22691436/unable-to-add-element-to-array-in -bash)。雖然這不是唯一的,但不一定是最好的重複,但問題完全相同。 –

回答

2

變量的值丟失。變量CONTADOR在子外殼中創建。當你離開它時(即在done之後)該變量不包含任何值。

讀取文件的正確方法是

while read LINE; do 
    # do stuff here 
done < "$FILENAME_2" 

瞭解更多關於使用while loopBashFAQ/001讀取數據。

+0

Thans JayPal,它工作完美,我不知道什麼是|在另一個終端上運行 感謝您的鏈接, – santiago92

+0

不客氣@ santiago92。很高興我能幫忙! ':)' –