重複の可能性:
Bash スクリプト - Do-While ループの変数スコープ
次のコードでは、内側の while ループでは正しい値が出力されますがi、内側の while ループから出た後は 0 が出力されます。
string="Medicine"
for file in *
do
    i=0
    cat $file | while read line
    do
        echo $line
        if [ "$line" == "$string" ];
        then
            i=`expr $i + 1`
            echo $i
        fi
    done
    echo $i
done