首页 > 解决方案 > 跳过节点时的 shell 迭代

问题描述

我有 20 个节点,其中 5 个没有 ssh(这是预期的)。这些值是从源中动态提取的。下面是我试图检查他们是否能够 SSH 的代码:

for skip_node in "${skip_nodes[@]}"
do 
    for node in "${nodes[@]}"
    do

        if [[  $node != $skip_node ]]; then continue; fi

        <I have my ssh logic working here>
        if [ $? -ne 0 ]; then
            UNABLE_TO_SSH+=" ${node}"
            (( ERROR_COUNT += 1 ))
        fi
    done
done

此脚本失败,因为数组节点再次包含那些在 skip_nodes 中的节点。关于我应该如何解决这个问题的任何帮助?

标签: shellfor-loop

解决方案


我成功地做到了这一点。我减去了 2 个列表,然后迭代了最终列表以进行 SSH 检查。

nodes=($(comm -3 <(printf "%s\n" "${nodes[@]}" | sort) <(printf "%s\n" "${skip_nodes[@]}" | sort) | sort -n))
for node in "${nodes[@]}"
do
    <my code for checking ssh>
    if [ $? -ne 0 ]; then
        UNABLE_TO_SSH+=" ${node}"
        (( ERROR_COUNT += 1 ))
    fi
done

推荐阅读