2014-10-30 49 views
0

所以我有一些问题声明一个数组的变量。 我想为每个数组迭代确定两个变量(STATUS和CONSUMERS)。在数组中声明变量

#!/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 []为)尝试使用所有变量的一次,或用 line 13: outbound.queue: syntax error: invalid arithmetic operator (error token is ".queue")

回来

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

+0

echo“$ QUEUE [$ i] running”is wrong because you must use braces:$ {QUEUE [$ i]} – Jdamian 2014-10-30 12:12:08

回答

0

你的代码中的一些注释;我无法检查,但希望它有帮助。我不明白i在for循环中的值。它是一个整数还是队列名称? 如果它是一个整数,你应该写for i in "${!QUEUE[@]}"; do;如果它是队列名称,那么STATUSCONSUMERS是关联数组,你应该用declare -A来声明它们。