1

bash スクリプトに問題があります

t='Hostname\cfg;'

echo "Header" > $DST

for i in *
do
        t="$i;"
        egrep -v "(^$|^#)" $IPLIST | while read ii
        do  
                if grep -q "$ii" $i
                then
                        t=$t"y;"
                else
                        t=$t"n;"
                fi  
echo "$t"
        done

echo "x$t"

        n=$(($n + 1))
        echo "$n"

        #echo "$ii;$t" # >> $DST
        #t=""
done

次の出力が生成されます。

h0010001.conf;y;
h0010001.conf;y;y;
<ommited>
h0010001.conf;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;n;n;y;y;y;y;y;y;y;y;y;y;y;y;n;y;y;y;y;y;y;n;y;y;y;y;y;y;y;y;y;n;n;
xh0010001.conf;

そのため、何らかの理由で、内側のループが完了した後、変数 t は空になります。私が達成したいのは、2番目のループの後に t - をファイルに書き込むことです。

4

1 に答える 1

1

@Barmarはぴったりでした。これが典型的な回避策です。

while ループを親シェルで実行するように変更します。

while read ii
    do  
            if grep -q "$ii" $i
            then
                    t=$t"y;"
            else
                    t=$t"n;"
            fi  
            echo "$t"
    done < <(egrep -v "(^$|^#)" $IPLIST)
于 2013-10-29T10:23:44.900 に答える