将 bash 中的 for 循环中的多个相同的 echo 合并为一个 echo

将 bash 中的 for 循环中的多个相同的 echo 合并为一个 echo

我正在创建一个监视脚本,该脚本在 for 循环中查看来自多个主机的结果,然后回显 OK 或 NOT OK...如果所有结果都 OK,那么我想将消息合并为单个 OK 否则 NOT OK。目前有效的方法如下:

脚本:

for HOST in $HOST1 $HOST2 $HOST2
do
    HEARTBEAT=$(${LDAPSEARCH} -h ${HOST} -p ${PORT} -D "${USER}" -w $${PASS} -b "" -s base "(objectClass=*)" | grep dn: | sed 's/dn:/dn/g')
    if [ $HEARTBEAT = 'dn' ]; then
        echo "ok"
    else
        echo "NOT OK"
    fi
done

输出:

$OK
$OK
$OK

否则输出:

$NOT OK
$NOT OK
$NOT OK

期望的输出:

$OK
else
$NOT OK

答案1

怎么样 - 稍微重新组织一下你的脚本:

#!/usr/bin/env bash

for HOST in $HOST1 $HOST2 $HOST2
do
    HEARTBEAT=$(${LDAPSEARCH} -h ${HOST} -p ${PORT} -D "${USER}" -w $${PASS} -b "" -s base "(objectClass=*)" | grep dn: | sed 's/dn:/dn/g')
    if [ ! $HEARTBEAT = 'dn' ]; then
        echo "NOT OK"
        exit 1
    fi
done

echo "ok"

该脚本将NOT OK在遇到第一个错误后打印一个单行,如果没有错误则HOST打印一个单行。OKHOSTs

相关内容