下のループでは、2つの変数(totalentriesとtotalusedbytes)の値をゼロにリセットしようとしますが、結果を見ると決してそのようなことは起こらないことがわかります。したがって、各ループは前のループの累積合計に追加され続けます。
# For each grid name, get a list of map indexes for that gridname
for grid in "${gridNames[@]}"
do
totalentries=0
totalusedbytes=0
indexlist=`snmpwalk -v 2c -c splunk $host mapGridName -m $APPLIANCEMIB -OUQs -Ln | grep $grid | sed -n 's/.*mapGridName\.\([0-9]\+\)[^0-9].*/\1/p'`
# Split list into an array
while read -r line; do
indexes+=(`echo $line`)
done <<< "$indexlist"
# Get the stats
for index in "${indexes[@]}"
do
# Entries in Cache
numentries=`snmpget -v 2c -c splunk $host mapNumEntries.$index -m $APPLIANCEMIB -OUQs -Ln | sed -n 's/.*\=[^0-9]\([0-9]\+\).*/\1/p'`
# Used Bytes
usedbytes=`snmpget -v 2c -c splunk $host mapUsedBytes.$index -m $APPLIANCEMIB -OUQs -Ln | sed -n 's/.*\=[^0-9]\([0-9]\+\).*/\1/p'`
if [[ $numentries ]]
then
totalentries=`expr $totalentries + $numentries`
fi
if [[ $usedbytes ]]
then
totalusedbytes=`expr $totalusedbytes + $usedbytes`
fi
done
echo $grid"_totalentries="$totalentries
echo $grid"_totalusedbytes="$totalusedbytes
done
出力は次のとおりです。ループ内のほとんどのグリッドは何も取得しませんが、前のループの合計を取得します。
A_grid_totalentries=0
A_grid_totalusedbytes=0
B_grid_totalentries=3
B_grid_totalusedbytes=30142
C_totalentries=3
C_totalusedbytes=30142
D_grid_totalentries=3
D_grid_totalusedbytes=30142
E_grid_totalentries=3
E_grid_totalusedbytes=30142
F_totalentries=3
F_totalusedbytes=30142
G_grid_totalentries=92
G_grid_totalusedbytes=1054348
H_grid_totalentries=96
H_grid_totalusedbytes=1114431
I_grid_totalentries=96
I_grid_totalusedbytes=1114431
答え1
問題は、インデックス配列に追加し続けてリセットしないことです。これらの変数をゼロにリセットする場合は、配列を空白にしてください。
totalentries=0
totalusedbytes=0
indexes=()
または、配列を異なる方法で埋めます。
mapfile -t indexes <<< "$indexlist"