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