Arithmetischer Syntaxfehler beim Ausführen eines Skripts im RedHat-Betriebssystem

Arithmetischer Syntaxfehler beim Ausführen eines Skripts im RedHat-Betriebssystem

Beim Versuch, ein Skript im RedHat-Betriebssystem auszuführen, tritt ein Problem auf. Es wird ein arithmetischer Syntaxfehler angezeigt.

Bildbeschreibung hier eingeben

Hier ist das Skript, das ich ausführen möchte:

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

Das Problem ist, dass ich an meiner Zeile 15 nichts Falsches sehe, da ich keine Regel von Unix sehe, die verletzt wurde, sodass es einen arithmetischen Syntaxfehler gab, oder übersehe ich etwas? Darf ich Sie Experten um Rat fragen? Jede Hilfe wäre sehr willkommen. Danke.

Antwort1

Die Zeilen 14 und 15 des Skripts lauten:

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

Wenn in Zeile 15 ein Fehler auftritt, liegt dies höchstwahrscheinlich daran, dass entweder „ PSPIDoder“ PIDnicht definiert ist, was wahrscheinlich dazu führt, dass Zeile 15 in etwa wie folgt aussieht:

if [[ -eq 12345 ]];then

Dies wäre ein syntaktischer Fehler. Sie können dies abmildern, indem Sie Ihre Variablen in Anführungszeichen setzen (z. B. "$PID"statt $PID).

Nebenbei bemerkt ist es hilfreich zu sehen, was passiert, während Ihr Skript ausgeführt wird. Dadurch wird die Ausgabe ein wenig verfälscht, aber bei problematischen Abschnitten Ihres Skripts können Sie „what's misbehaving“ (was sich schlecht verhält) mit dem Präfix versehen, set -xund Ihre Standardausgabe enthält nun Befehl für Befehl, was an die Shell gesendet wird, die das Skript ausführt.

Antwort2

Die Fehlermeldung zeigt zwei Zahlen. Dies scheinen Prozess-IDs zu sein. Eine wahrscheinliche Antwort ist, dass Ihre Zeile

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

findet 2 Dateien und Sie erhalten diese 2 PIDs in der Variable, getrennt durch eine neue Zeile. Bei Verwendung in if [[ $PSPID -eq $PID ]]haben Sie 2 Zahlen nach dem -eq, was den Syntaxfehler darstellt.

Sie sollten Ihre Variablen in doppelte Anführungszeichen setzen (z. B. "$PID"), um diese Art von Syntaxfehler zu vermeiden, obwohl das wirkliche Problem offensichtlich darin liegt, dass Sie 2 Zahlen statt 1 hatten. Je nachdem, was in Ihrer Situation zulässig ist, können Sie einfach eine Schleife hinzufügen, die jede PID separat verarbeitet ( for pid in $PID...).

verwandte Informationen