用于与 ksh 中的 case 语句匹配的短语的正则表达式

用于与 ksh 中的 case 语句匹配的短语的正则表达式

我正在尝试在 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。(收集器未运行)”那么您应该将其作为第一个 case 语句:

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

答案2

好吧,我从 case 语句转向了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

相关内容