我正在尝试在 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