在 RedHat 作業系統中執行腳本時出現算術語法錯誤

在 RedHat 作業系統中執行腳本時出現算術語法錯誤

當我嘗試在 RedHat 作業系統中執行腳本時遇到問題。我收到算術語法錯誤。

在此輸入影像描述

現在這是我嘗試運行的腳本:

#!/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 ""

問題是我沒有看到第 15 行有任何問題,因為我沒有看到任何來自 unix 的規則因算術語法錯誤而被違反,或者我是否遺漏了一些東西?請問各位專家有什麼建議嗎?任何幫助將非常感激。謝謝。

答案1

腳本的第 14 行和第 15 行是:

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

如果您在第 15 行遇到錯誤,最可能的原因是PSPIDPID未定義,可能會導致第 15 行出現類似以下內容的有效結果:

if [[ -eq 12345 ]];then

這將是一個語法錯誤。您可以透過引用變數(例如"$PID"而不是$PID)來緩解這種情況。

順便說一句,了解腳本運行時發生的情況很有幫助。它確實會稍微修改輸出,但對於腳本中有問題的部分,請在行為不當的部分加上前綴set -x,並且標準輸出現在將包括逐個命令發送到運行腳本的 shell 的內容。

答案2

錯誤訊息顯示兩個數字。這些似乎是進程 ID。一個可能的答案是你的路線

PID=`cat /usr/kplushome/entities/Standalone/config/webaccess/WebaccessDomainTomcat/bin/tomcat-*.pid`

正在尋找 2 個文件,並且您將在變數中設置這 2 個 pid,並以換行符號分隔。使用 in 時,if [[ $PSPID -eq $PID ]]後面會出現 2 個數字-eq,這是語法錯誤。

您應該用雙引號引用您的變數(例如"$PID")以避免這種類型的語法錯誤,但顯然真正的問題是您有2 個數字而不是1 個。一個單獨處理每個pid 的循環(for pid in $PID...)。

相關內容