For循环在bash中未给出预期输出

For循环在bash中未给出预期输出,bash,shell,grep,Bash,Shell,Grep,我创建了一个脚本来从一个文件中查找多个字符串。但是获得一个不需要的长输出。 并希望获得以下输出。 例如:如果所有字符串都匹配,则echo所有节点都向上elseWEB1 WEB2 down 如果在该文件中找不到WEB1和WEB2 下面是我的脚本和输出: arr=("WEB1" "WEB2" "WEB3" "WEB4" "WEB5" "WEB6" "WEB7" "WEB8" "WEB9" "WEB10" "pro-webs3") for i in ${arr[@]} do if grep -w

我创建了一个脚本来从一个文件中查找多个字符串。但是获得一个不需要的长输出。 并希望获得以下输出。 例如:如果所有字符串都匹配,则echo
所有节点都向上
else
WEB1 WEB2 down
如果在该文件中找不到WEB1和WEB2

下面是我的脚本和输出:

arr=("WEB1" "WEB2" "WEB3" "WEB4" "WEB5" "WEB6" "WEB7" "WEB8" "WEB9" "WEB10" "pro-webs3")

for i in ${arr[@]}
do
  if grep -w "$i" Filename >> /dev/null
then
echo $i >> /dev/null
echo "node are up"
else
echo "$i Node is down"
fi
done
输出:

WEB1 Node is down
All nodes are up
All nodes are up
All nodes are up
All nodes are up
All nodes are up
All nodes are up
All nodes are up
All nodes are up
All nodes are up
pro-webs3 Node is down

创建一个失败节点数组并相应地采取行动:如果不是空的,则列出节点

arr=("WEB1" "WEB2" "WEB3" "WEB4" "WEB5" "WEB6" "WEB7" "WEB8" "WEB9" "WEB10" "pro-webs3")
failed=()

for i in "${arr[@]}"
do
  if ! grep -q -w "$i" Filename
  then
    failed+=("$i")
  fi
done

if [ "${#failed[@]}" -eq 0 ]
then
    echo "All nodes are UP"
else
    echo "${failed[@]} DOWN"
fi

缩进非常有用-请使用它…该脚本不会产生声明的输出,因为无论
grep
是否成功,您都会调用
exit
。循环(和脚本)在第一次迭代中终止。对于缩进为True。但是这个脚本没有给出显示的输出,它实际上在第一次匹配时退出,向上或向下(向上的节点名称也不会显示)。我编辑了这个问题,它被错误地添加了。如果您发布了一个文件名示例,我们可以帮助您以正确的方式执行此操作(这不是shell循环-请参阅)。