Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在数组中声明变量_Arrays_Bash_For Loop - Fatal编程技术网

Arrays 在数组中声明变量

Arrays 在数组中声明变量,arrays,bash,for-loop,Arrays,Bash,For Loop,所以我在用数组声明变量时遇到了一些问题。 我希望为数组的每次迭代确定两个变量(状态和消费者) #!/bin/bash QUEUE=( outbound.queue, inbound.queue, outbound.queue.optin ) DATE="$(date)" MESSAGE="${QUEUE[$i]} is active with no Consumers at $DATE" DESC="Please check rabbitmq for info on $HOSTNAME" ALI

所以我在用数组声明变量时遇到了一些问题。 我希望为数组的每次迭代确定两个变量(状态和消费者)

#!/bin/bash
QUEUE=( outbound.queue, inbound.queue, outbound.queue.optin )
DATE="$(date)"
MESSAGE="${QUEUE[$i]} is active with no Consumers at $DATE"
DESC="Please check rabbitmq for info on $HOSTNAME"
ALIAS="${QUEUE[$i]} $HOSTNAME"

for i in "${QUEUE[@]}"; do

    STATUS[$i]=$(sudo /usr/sbin/rabbitmqctl list_queues name status | grep "^${QUEUE[@]}\s" | sed "s/${QUEUE[@]}\s//")
    CONSUMERS[$i]=$(sudo /usr/sbin/rabbitmqctl list_queues name consumers | grep "^${QUEUE[@]}\s" | sed "s/${QUEUE[@]}\s//")

    if  [ "${STATUS[$i]}" = "running" ];
            then
            echo "$QUEUE[$i] is running";
                    if [ "${CONSUMERS[$i]}" = "0" ];
                    then
            lamp createAlert;
                    fi
            else
                    echo "$QUEUE is not running";
    fi
done
现在发生的情况是,它要么(取决于@或*在$QUEUE[]中)尝试一次使用所有变量,要么返回
第13行:outbound.queue:语法错误:算术运算符无效(错误标记为“.queue”)


任何帮助都将不胜感激:)

代码中的一些注释;我无法检查,但希望能有所帮助

#!/bin/bash

# remove commas from the list; separator is blank
QUEUE=(outbound.queue inbound.queue outbound.queue.optin)
DATE="$(date)"

# i is undefined. Use a printf at the time i is known.
MESSAGE="${QUEUE[$i]} is active with no Consumers at $DATE"
DESC="Please check rabbitmq for info on $HOSTNAME"
ALIAS="${QUEUE[$i]} $HOSTNAME"

for i in "${QUEUE[@]}"; do

    STATUS[$i]=$(sudo /usr/sbin/rabbitmqctl list_queues name status | grep "^${QUEUE[@]}\s" | sed "s/${QUEUE[@]}\s//")
    CONSUMERS[$i]=$(sudo /usr/sbin/rabbitmqctl list_queues name consumers | grep "^${QUEUE[@]}\s" | sed "s/${QUEUE[@]}\s//")

    if  [ "${STATUS[$i]}" = "running" ]   # ';' unnecessary
    then
        # {} were missing
        echo "${QUEUE[$i]} is running"
        if [ "${CONSUMERS[$i]}" = "0" ]
        then
           lamp createAlert
        fi
    else
        echo "$QUEUE is not running"
    fi
done
我无法理解for循环中
I
的值。它是整数还是队列名称? 如果是整数,则应在“${!队列[@]}”中为i编写
;执行
;如果它是队列名称,那么
状态
使用者
是关联数组,您应该使用
声明-a

echo“$queue[$i]正在运行”来声明它们,这是错误的,因为您必须使用大括号:${queue[$i]}