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

0

Estou encontrando um problema quando tento executar um script no RedHat OS. Eu recebo um erro de sintaxe aritmética.

Esseéoscriptqueestoutentandoexecutar:

#!/bin/kshecho""
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 eu não vejo nada de errado com a minha linha 15, já que não vejo nenhuma regra do unix que foi violada para 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.

    
por Francis 15.02.2016 / 09:23

2 respostas

0

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á recebendo esses 2 pids definidos na variável, separados por uma nova linha. Quando usado em if [[ $PSPID -eq $PID ]] , você terá dois números após o -eq , que é o erro de sintaxe.

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

    
por 15.02.2016 / 11:04
1

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 PSPID ou PID é indefinido, provavelmente resultando em uma linha eficaz 15 de algo como:

if [[ -eq 12345 ]];then

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 o script é executado. Ele munge a saída um pouco, mas para seções problemáticas do seu script, prefixar o que está se comportando mal com set -x e sua saída padrão agora incluirá comando por comando o que está sendo enviado para o shell que está executando o script.

    
por 15.02.2016 / 09:43