gpt4 book ai didi

arrays - 错误的数组下标

转载 作者:行者123 更新时间:2023-11-29 08:54:45 25 4
gpt4 key购买 nike

我对 Shell 比较陌生,我一直在尝试在 Shell 中使用数组,但效果不佳。如果 OpenVZ 容器在一段时间内达到特定带宽阈值,我正在尝试编写一个脚本来暂停它们。

我的脚本:

#!/bin/bash
#Thresholds are in bytes per second and count1 must > count2
LOGDIR="/var/log/outbound_ddos"
SECS=10
THRESHOLD1=65536000
COUNT1=10
THRESHOLD2=117964800
COUNT2=2

while [ 1 ]
do
for veid in $(/usr/sbin/vzlist -o veid -H)
do
# Create the log file if it doesn't already exist
if ! test -e $LOGDIR/$veid.log; then
touch $LOGDIR/$veid.log
fi

# Parse out the inbound/outbound traffic and assign them to the corresponding variables
eval $(/usr/sbin/vzctl exec $veid "grep venet0 /proc/net/dev" | \
awk -F: '{print $2}' | awk '{printf"CTOUT=%s\n", $9}')

# Print the output and a timestamp to a log file
echo $(date +%s) $CTOUT >> $LOGDIR/$veid.log

# Read last 10 entries into arrays
i=0
tail $LOGDIR/$veid.log | while read time byte
do
times[$i]=time; bytes[$i]=byte
let i++
done

# Sanity checks and calculations
for (( i=0; i<COUNT1; i++ ))
do
# Sanity check on the time
if (( times[$i] > times[$i - 1] + $SECS + 10 ))
then continue
fi

# Calculate differences
let "diff[$i] = bytes[$i+1] - bytes[$i]"
done

# Work out thresholds and suspend where necessary
# Higher threshold first
t2=0
for (( i=COUNT1-1; i>=0; i-- ))
do
if [ ! diff[$i] ]
then continue
else
if (( bytes[$i] < THRESHOLD1 * SECS + bytes[$i-1] + 1 ))
then continue
else let t2++
fi
fi
done
#Lower threshold last
t1=0
for (( i=COUNT1-1; i>=0; i-- ))
do
if [ ! diff[$i] ]
then continue
else
if (( bytes[$i] < THRESHOLD1 * SECS + bytes[$i-1] + 1 ))
then continue
else let t1++
fi
fi
done

# Suspend where necessary
if (( ($t2 >= $COUNT2) || ($t1 >= $COUNT1) ))
then vzctl stop veid
fi
done
sleep $SECS
done

错误:

script.sh: line 38: times: bad array subscript
script.sh: line 54: bytes: bad array subscript
script.sh: line 67: bytes: bad array subscript

我已经尝试了数组下标的几种变体,但我似乎无法摆脱这些错误。

最佳答案

所以在第 38 行,

if (( times[$i] > times[$i - 1] + $SECS + 10 ))

在迭代期间将引用 times[-1] 一次。负指数是 only very recently part of bash arrays ,所以这很可能是您收到错误的原因。

与第 54 行和第 67 行一样,您遇到了一次负数数组下标。调整循环以避免 [0 - 1]

关于arrays - 错误的数组下标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16120155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com