Error de sintaxis aritmética al ejecutar un script en RedHat OS

Error de sintaxis aritmética al ejecutar un script en RedHat OS

Me encuentro con un problema cuando intento ejecutar un script en RedHat OS. Recibo un error de sintaxis aritmética.

ingrese la descripción de la imagen aquí

Ahora aquí está el script que estoy intentando ejecutar:

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

El problema es que no veo nada malo en mi línea 15, ya que no veo ninguna regla de Unix que haya sido violada para que tenga un error de sintaxis aritmética, ¿o me falta algo? ¿Puedo pedir algún consejo a sus expertos? Cualquier ayuda sería muy apreciada. Gracias.

Respuesta1

Las líneas 14 y 15 del guión son:

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

Si recibe un error en la línea 15, la causa más probable es que PSPIDo PIDno esté definido, lo que probablemente resulte en una línea 15 efectiva de algo como:

if [[ -eq 12345 ]];then

lo cual sería un error sintáctico. Puede mitigar esto citando sus variables (por ejemplo, "$PID"en lugar de $PID).

Aparte, es útil ver qué sucede mientras se ejecuta el script. Modifica un poco la salida, pero para las secciones problemáticas de su secuencia de comandos, prefije lo que se está comportando mal set -xy su salida estándar ahora incluirá comando por comando lo que se envía al shell que ejecuta la secuencia de comandos.

Respuesta2

El mensaje de error muestra dos números. Estos parecen ser identificadores de procesos. Una respuesta probable es que su línea

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

está encontrando 2 archivos y obtienes estos 2 pids configurados en la variable, separados por una nueva línea. Cuando se use en if [[ $PSPID -eq $PID ]]tendrá 2 números después de -eq, que es el error de sintaxis.

Debes citar dos veces tus variables (p. ej. "$PID") para evitar este tipo de error de sintaxis, aunque claramente el problema real es que tenías 2 números en lugar de 1. Dependiendo de lo que sea legal para tu situación, simplemente puedes agregar un bucle que maneje cada pid por separado. ( for pid in $PID...).

información relacionada