bash의 for 루프에 있는 여러 개의 동일한 에코를 하나의 에코로 결합합니다.

bash의 for 루프에 있는 여러 개의 동일한 에코를 하나의 에코로 결합합니다.

for 루프에서 여러 호스트의 결과를 확인한 다음 OK 또는 NOT OK를 에코하는 모니터링 스크립트를 만들고 있습니다. 모든 결과가 OK이면 메시지를 단일 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첫 번째 오류가 발생한 후 한 줄을 인쇄하고, HOST오류가 없으면 한 줄을 인쇄합니다.OKHOSTs

관련 정보