Bash:检查关联数组的所有值是否等于

时间:2015-12-23 20:43:05

标签: arrays bash foreach

我有一个动态创建的关联数组。我不知道会有多少项目或者他们的名字会是什么,但这是我创建的一个例子: -

declare -A MDARRAY
MDARRAY[md126]="clean"
MDARRAY[md127]="degraded"

我想将每个数组项的值与几个字符串进行比较。例如,所需的结果类似于: -

if [ "$MDARRAY[md126]" != "clean" || "$MDARRAY[md126]" != "active" && "$MDARRAY[md127]" != "clean" || "$MDARRAY[md127]" != "active" ]; then
...
else
...
fi

如果有5个数组项目,则会检查所有5个数组项目,如果其中任何一个数据项不等于' clean'或者'活跃的'第一个代码块与第二个代码块匹配。

希望这是有道理的。

2 个答案:

答案 0 :(得分:0)

您可以使用${MDARRAY[@]}获取所有值,并使用for循环来检查每个值。

答案 1 :(得分:0)

在Karoly的帮助下我的解决方案: -

clean=0
for i in "${!MDARRAY[@]}"; do
    # Compare the state of the devices
    if [ "${MDARRAY[$i]}" != "clean" ] && [ "${MDARRAY[$i]}" != "active" ] ; then
        # Increment error count
        ((clean=clean+1))
        # Add device name to array if error
        BADARRAY=(${BADARRAY[@]} $i)
    fi
done