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

2つの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

関連情報