在条件检查中的bash for循环错误

时间:2013-02-05 12:49:03

标签: arrays bash shell

我有一个for循环来检查我在文件中的节点列表是否存活:

#!/bin/bash
tmpnodes=$(cat $1)
#declare -a nodes
nodes=()
for node in $tmpnodes
do
        result=$(ping -q -c 1 -W 2 $node >/dev/null 2>&1; echo $?)
        echo "Result: $result, on node $node"
        if [ $result -eq 0 ] ; then
                nodes+=("$node")
                #nodes=(${nodes[@]} "$node")
        fi
done

echo "pingable nodes:"
for node in $nodes
do
        echo "$node"
done

(我也尝试过使用declare

的版本

虽然我有更多pingable节点,但我总是得到这个输出:

$  ./script.sh nodes
Result: 1, on node clab148node11
Result: 1, on node clab148node12
Result: 0, on node clab148node15
Result: 0, on node clab148node16
Result: 0, on node clab148node17
Result: 0, on node clab148node18
pingable nodes:
clab148node15

1 个答案:

答案 0 :(得分:0)

而不是:

for node in $nodes
do
        echo "$node"
done

每次我这样做时确实打印了数组的第一个元素:

echo ${nodes[@]}