ksh의 사례 문과 일치하는 구문에 대한 정규 표현식

ksh의 사례 문과 일치하는 구문에 대한 정규 표현식

ksh의 AIX에서 서비스를 시작하거나 중지하려고 합니다.

서비스가 종료되었는지 등을 확인하기 위해 바보 방지 메커니즘 구축을 시작하려고 합니다.

이건 내 스크립트야

#!/bin/ksh


#################################################################################
#                        PARAMETERS & VARIABLES SECTION                         #
#################################################################################

DBI_LOC="DBI/InstallCollector/dbi_collector/bin"

#Put input option to upper case.
OPTION=$( echo "$1" | tr "[:lower:]" "[:upper:]" )

#################################################################################
#                              FUNCTION SECTION                                 #
#################################################################################

parseresults() {
    typeset RESULT="$1"

    if [ "${OPTION}" = "START" ] ; then
        case "${RESULT}" in 
            *)
                echo "Success"
            ;;
        esac
    else
        case "${RESULT}" in 
            DBI.(Collector is not running))
                echo "Collector is already down. Continuing..."
            ;;
            DBI.(performance data collector shutdown COMPLETE))
                echo "Success shutting down collector. Continuing..."
            ;;
            *)
                echo "Error shutting down the collector. Exiting with error."
                exit 1
            ;;
        esac
    fi
}


#################################################################################
#                             MAIN SCRIPT SECTION                               #
#################################################################################



case "${OPTION}" in
    "START")
        echo "Starting the collectors..."
        RESULT=$(ksh ~/${DBI_LOC}/start_dbi_collector.sh)
        ;;
    "STOP")
        echo "Stopping the collectors..."
        RESULT=$(ksh ~/${DBI_LOC}/stop_dbi_collector.sh)
        ;;
    *)
        echo "Error: No Parameter specified. Must be either start or stop"
        exit 1
        ;;
esac

echo ${RESULT}
parseresults ${RESULT}

echo
echo

두 개의 DBI 문구를 일치시킬 수 없는 것 같습니다. 둘 다 중지 스크립트에서 가능한 출력입니다. 나는 이러한 성공을 고려하고 싶지만 다른 어떤 것도 실패할 수 있습니다.

나는 아직도 정규 표현식(그리고 Java와 ksh 등에서 정규 표현식이 어떻게 다른지)을 배우는 중이므로 제가 서투른 점을 용서해 주셔야 합니다. 내가 뭘 잘못했나요? 귀하의 답변에서 내 접근 방식이 작동하지 않는 이유를 설명할 수 있습니까? 정답은 작동합니다. (다른 사람에게 낚시하는 법을 가르쳐주면 나도 좋아…)

편집하다:제 생각에는 괄호와 관련이 있는 것 같습니다. 동일한 정지 문제가 있는 다른 스크립트가 있는데 대괄호를 제거하면 함수가 완전히 정지됩니다. 그래서 내 팁은 여전히 ​​구문 일치를 수행하는 방법입니다.

답변1

"START" 및 "STOP"과 마찬가지로 일치시키려는 문자열 주위에 따옴표를 추가해야 합니다.

만약에스크립트는 "DBI. (Collector not running)"을 출력합니다. 그러면 첫 번째 Case 문으로 다음이 있어야 합니다.

    case "${RESULT}" in 
        "DBI.(Collector is not running)")

답변2

글쎄, 나는 사례 설명에서 egrep으로 전환했습니다. 그것이 도움이 되는 것 같았기 때문입니다. 함수에 인수를 전달하는 데 문제가 있어서 포기했습니다. 최고는 아니지만 효과가 있었습니다. 이에 대해 더 생각이 있으신가요?

#!/bin/ksh


#################################################################################
#                        PARAMETERS & VARIABLES SECTION                         #
#################################################################################

DBI_LOC="DBI/InstallCollector/dbi_collector/bin"

#Put input option to upper case.
OPTION=$( echo "$1" | tr "[:lower:]" "[:upper:]" )

#################################################################################
#                              FUNCTION SECTION                                 #
#################################################################################

parseresults() {

    if [ "${OPTION}" = "START" ] ; then
        echo "Success"
        return 0
    else
        echo ${RESULT} | egrep -s ".*DBI.*not\srunning.*"
        if [ $? = 0 ] ; then
            echo "Collector is already down. Continuing..."
            return 0
        fi

        echo ${RESULT} | egrep -s ".*DBI.*COMPLETE.*"
        if [ $? = 0 ] ; then
            echo "Success shutting down collector. Continuing..."
            return 0
        fi

        echo "Error shutting down the collector. Exiting with error."
        return 1
    fi
}

#################################################################################
#                             MAIN SCRIPT SECTION                               #
#################################################################################



case "${OPTION}" in
    "START")
        echo "Starting the collectors..."
        RESULT=$(ksh ~/${DBI_LOC}/start_dbi_collector.sh)
        ;;
    "STOP")
        echo "Stopping the collectors..."
        RESULT=$(ksh ~/${DBI_LOC}/stop_dbi_collector.sh)
        ;;
    *)
        echo "Error: No Parameter specified. Must be either start or stop"
        exit 1
        ;;
esac

echo ${RESULT}
parseresults 

if [ ! $? = 0 ] ; then
    exit 1
fi

echo
echo

관련 정보