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]}