RedHat オペレーティングシステムでスクリプトを実行すると、アルゴリズム構文エラーが発生します。

RedHat オペレーティングシステムでスクリプトを実行すると、アルゴリズム構文エラーが発生します。

RedHat OSでスクリプトを実行しようとすると問題が発生します。算術構文エラーが発生します。

ここに画像の説明を入力してください。

今これは私が実行したいスクリプトです。

#!/bin/ksh

echo ""
echo " = K+WA =";
WA_PORT="`cat /usr/kplushome/entities/Standalone/config/kondor.active |grep PORTAL_PORT|cut -d '&' -f 2`"

#== Checking Tomcat of WebAccess
printf "%25s" Tomcat
touch /usr/kplushome/entities/Standalone/config/webaccess/WebaccessDomainTomcat/bin/tomcat-*.pid
PID=`cat /usr/kplushome/entities/Standalone/config/webaccess/WebaccessDomainTomcat/bin/tomcat-*.pid`
if [[ $PID = "" ]];then
echo " x 0"
else
PSPID=`/bin/ps -eo pid | grep -w $PID`
if [[ $PSPID -eq $PID ]];then
/bin/ps -ef | grep $PID | grep -v grep | awk 'NR==1 {print " = "$8 $9 $10 $11 $12 $13 $14 $15}'
else
echo " x 0"
fi
fi

PORT_STATUS=`netstat -an | grep ${WA_PORT} | grep LISTEN | perl -pe "s/^.+\n/LISTENING/g;"`
PORT_STATUS=${PORT_STATUS:="NOT LISTENING!!!"}
echo " Port ${WA_PORT}/TCP = ${PORT_STATUS}"

cd /usr/kplushome/entities/Standalone/config/webaccess/WebaccessServer/etc
(PATH=/usr/ucb:$PATH; ./checkall.sh;) | perl -pe "s,^, ,g;"
echo ""

問題は、算術構文エラーがUnixのどの規則に違反しているのかを見ることができないため、15行目で問題が見つからないことです。それとも何か抜けましたか?どの専門家がどのような提案をしますか?どんな助けでも大変感謝します。ありがとうございます。

ベストアンサー1

スクリプトの14行と15行は次のとおりです。

PSPID=`/bin/ps -eo pid | grep -w $PID`
if [[ $PSPID -eq $PID ]];then

15行目でエラーが発生した場合、最も可能性の高い原因は定義されていないためPSPIDPID15行目で次のような有効な結果が表示されることがあります。

if [[ -eq 12345 ]];then

これは構文エラーです。変数を引用して(たとえば代わり​​に"$PID"$PIDこれを軽減できます。

しかし、スクリプトが実行されたときに何が起こるのかを知るのが役立ちます。出力を少し修正しますが、問題のあるスクリプト部分の場合、誤動作する部分の前にプレフィックスを付けると、set -x標準出力にはスクリプトを実行するシェルにコマンドごとに送信される内容が含まれます。

おすすめ記事