Erro de sintaxe aritmética ao executar um script no RedHat OS

Erro de sintaxe aritmética ao executar um script no RedHat OS

Estou encontrando um problema ao tentar executar um script no RedHat OS. Recebo um erro de sintaxe aritmética.

insira a descrição da imagem aqui

Agora aqui está o script que estou tentando executar:

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

O problema é que não vejo nada de errado com minha linha 15, pois não vejo nenhuma regra do Unix que tenha sido violada por ter um erro de sintaxe aritmética ou estou faltando alguma coisa? Posso pedir algum conselho de vocês, especialistas? Qualquer ajuda seria muito apreciada. Obrigado.

Responder1

As linhas 14 e 15 do script são:

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

Se você estiver recebendo um erro na linha 15, a causa mais provável é que ou PSPIDseja PIDindefinido, provavelmente resultando em uma linha 15 efetiva de algo como:

if [[ -eq 12345 ]];then

o que seria um erro sintático. Você pode atenuar isso citando suas variáveis ​​(por exemplo, "$PID"em vez de $PID).

Além disso, é útil ver o que está acontecendo enquanto seu script é executado. Ele altera um pouco a saída, mas para seções problemáticas do seu script, prefixe o que está se comportando mal set -xe sua saída padrão agora incluirá comando por comando o que está sendo enviado para o shell que está executando o script.

Responder2

A mensagem de erro mostra dois números. Estes parecem ser IDs de processo. Uma resposta provável é que sua linha

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

está encontrando 2 arquivos e você está obtendo esses 2 pids definidos na variável, separados por uma nova linha. Quando usado em if [[ $PSPID -eq $PID ]]você terá 2 números após o -eq, que é o erro de sintaxe.

Você deve colocar aspas duplas em suas variáveis ​​(por exemplo, "$PID") para evitar esse tipo de erro de sintaxe, embora claramente o verdadeiro problema seja que você tinha 2 números em vez de 1. Dependendo do que é legal para sua situação, você pode simplesmente adicionar um loop manipulando cada pid separadamente ( for pid in $PID...)).

informação relacionada