我有一个openwrt上的脚本，做上网时长统计，超时就做限制，代码如下，你给看看是否有问题或者可以优化的地方：
#!/bin/bash

env > /var/log/cron_env.log
# 设置语言环境
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

# 手动设置 PATH
export PATH=/usr/sbin:/usr/bin:/sbin:/bin

# 加载配置文件
CONFIG_FILE="/etc/traffic_monitor.conf"
if [ -f "$CONFIG_FILE" ]; then
    source "$CONFIG_FILE"
else
    echo "配置文件 $CONFIG_FILE 未找到，脚本退出" >> /var/log/traffic_monitor.log
    exit 1
fi

# 自定义链名称
CHAIN_NAME_FILTER="TRAFFIC_MONITOR_FILTER"
CHAIN_NAME_MANGLE="TRAFFIC_MONITOR_MANGLE"

# 检查并创建自定义链（filter表）
if ! iptables -t filter -L $CHAIN_NAME_FILTER >/dev/null 2>&1; then
    iptables -t filter -N $CHAIN_NAME_FILTER
    iptables -I FORWARD -s "$TARGET_IP" -j $CHAIN_NAME_FILTER
    iptables -I FORWARD -d "$TARGET_IP" -j $CHAIN_NAME_FILTER
fi

# 检查并创建自定义链（mangle表）
if ! iptables -t mangle -L $CHAIN_NAME_MANGLE >/dev/null 2>&1; then
    iptables -t mangle -N $CHAIN_NAME_MANGLE
    iptables -t mangle -A POSTROUTING -d "$TARGET_IP" -j $CHAIN_NAME_MANGLE
    iptables -t mangle -A POSTROUTING -s "$TARGET_IP" -j $CHAIN_NAME_MANGLE
fi

# 监控客户端流量，确保只添加一次监控规则
if ! iptables -L $CHAIN_NAME_FILTER -n | grep -q "RETURN"; then
    iptables -A $CHAIN_NAME_FILTER -s "$TARGET_IP" -j RETURN
    iptables -A $CHAIN_NAME_FILTER -d "$TARGET_IP" -j RETURN
fi

if ! iptables -t mangle -L $CHAIN_NAME_MANGLE | grep -q "RETURN"; then
    iptables -t mangle -A $CHAIN_NAME_MANGLE -s "$TARGET_IP" -j RETURN
    iptables -t mangle -A $CHAIN_NAME_MANGLE -d "$TARGET_IP" -j RETURN
fi

# 获取当前日期和时间
CURRENT_HOUR=$(date +'%H')
CURRENT_DATE=$(date +'%Y-%m-%d')

# 创建日志目录，如果不存在
mkdir -p "$LOG_DIR"

# 获取当前已使用时间的日志文件
CURRENT_HOUR_LOG="$LOG_DIR/hour_$CURRENT_HOUR.log"
CURRENT_DAILY_LOG="$LOG_DIR/$CURRENT_DATE.log"

# 检查并读取当前小时和日的已使用时间
DAILY_USED_TIME=$(cat "$CURRENT_DAILY_LOG" 2>/dev/null || echo 0)
HOUR_USED_TIME=$(cat "$CURRENT_HOUR_LOG" 2>/dev/null || echo 0)

# 如果超过最大时间限制，则删除相关规则并添加 DROP 规则
if [ "$DAILY_USED_TIME" -ge "$MAX_TIME" ]; then
    # 删除 TRAFFIC_MONITOR 规则
    if iptables -C FORWARD -s "$TARGET_IP" -j $CHAIN_NAME_FILTER 2>/dev/null; then
        iptables -D FORWARD -s "$TARGET_IP" -j $CHAIN_NAME_FILTER
    fi
    
    if iptables -C FORWARD -d "$TARGET_IP" -j $CHAIN_NAME_FILTER 2>/dev/null; then
        iptables -D FORWARD -d "$TARGET_IP" -j $CHAIN_NAME_FILTER
    fi
    
    if iptables -t mangle -C POSTROUTING -s "$TARGET_IP" -j $CHAIN_NAME_MANGLE 2>/dev/null; then
        iptables -t mangle -D POSTROUTING -s "$TARGET_IP" -j $CHAIN_NAME_MANGLE
    fi
    
    if iptables -t mangle -C POSTROUTING -d "$TARGET_IP" -j $CHAIN_NAME_MANGLE 2>/dev/null; then
        iptables -t mangle -D POSTROUTING -d "$TARGET_IP" -j $CHAIN_NAME_MANGLE
    fi

    # 添加 DROP 规则
    if ! iptables -L FORWARD -n | grep -q "DROP.*$TARGET_IP"; then
        iptables -A FORWARD -s "$TARGET_IP" -j DROP
        iptables -A FORWARD -d "$TARGET_IP" -j DROP
        logger -t traffic_monitor "Traffic blocked for $TARGET_IP: daily limit of $((MAX_TIME/60)) hours exceeded at $(date)" >> /var/log/traffic_monitor.log
    fi

    if ! iptables -t mangle -L POSTROUTING -n | grep -q "DROP.*$TARGET_IP"; then
        iptables -t mangle -A POSTROUTING -s "$TARGET_IP" -j DROP
        iptables -t mangle -A POSTROUTING -d "$TARGET_IP" -j DROP
    fi
    exit 0
fi

# 获取当前流量
OUT_BYTES=$(iptables -L $CHAIN_NAME_FILTER -v -x  -n| grep "$TARGET_IP" | awk '{SUM += $2} END {print SUM}')
IN_BYTES=$(iptables -t mangle -L POSTROUTING -v -x -n | grep "$TARGET_IP" | awk '{SUM += $2} END {print SUM}')

# 确保字节数不是空值
BYTES=$((OUT_BYTES + IN_BYTES))

# 重置流量统计
iptables -Z $CHAIN_NAME_FILTER
iptables -t mangle -Z $CHAIN_NAME_MANGLE

# 将字节数转换为速率
CURRENT_RATE=$(echo "scale=2; ($BYTES * 8) / (1000 * $INTERVAL * 60)" | bc)

# 如果当前流量大于阈值，则计时
if (( $(echo "$CURRENT_RATE > $THRESHOLD_RATE" | bc -l) )); then
    DAILY_USED_TIME=$((DAILY_USED_TIME + INTERVAL))
    HOUR_USED_TIME=$((HOUR_USED_TIME + INTERVAL))
fi

# 保存使用时间
echo "$HOUR_USED_TIME" > "$CURRENT_HOUR_LOG"
echo "$DAILY_USED_TIME" > "$CURRENT_DAILY_LOG"