bashのforループにある複数の同じエコーを1つのエコーに結合します。

bashのforループにある複数の同じエコーを1つのエコーに結合します。

forループで複数のホストの結果を確認し、OKまたはNOT OKをエコーする監視スクリプトを作成しています。すべての結果が OK の場合、メッセージを 1 つの OK にマージし、そうでなければ 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最初のエラーが発生した後に1行を印刷し、HOSTエラーがない場合は1行を印刷します。OKHOSTs

関連情報