script para condição de uma listagem [RESOLVIDO]

1. script para condição de uma listagem [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 31/01/2011 - 12:21h

Pessoal, to precisando criar uma condição desta forma:
1) faço um for em um determinado diretorio para me listar apenas arquivos com extensões *.abc
2) este for gerará uma lista com inumeros arquivos com esta extensao, porem quero apenas um arquivo especifico, por exemplo:

# loop para me listar apenas os arquivos com extensão "*.def" e em seguida excluo o a extensão

for files in $(cd $MEU_DIR/abc/ && ls *.def 2> /dev/null | cut -d"." -f1)
do

# condição para verificar se os arquivos listados no loop é igual ao meu arquivo contido na variável $MINHA_APLICACAO
if [ "$files" == "$MINHA_APLICACAO" ]
then

# verifico se a aplicação contida na variável $MINHA_APLICACAO está executando
STATUS_ABC=`ps ax | grep $MINHA_APLICACAO | grep -v grep | grep -v $0 | awk '{print $1}'`

# se a aplicação existir, ou seja, se for listada no loop acima e for igual a minha variável $MINHA_APLICACAO exibe a mensagem abaixo
if [ -n "$STATUS_ABC" ]
then
echo "APLICACAO EXISTE, E ESTA EM EXECUCAO"
exit 0
# se a aplicação não existir, ela chama uma função para disparar a mesma
else
INICIAR_APLICACAO
fi
done


Agora, minha pergunta é: se a aplicação não existir, ou seja, se o arquivo que desejo, neste caso o $MINHA_APLICACAO, não for listado
em $files, como faço para finalizar o loop e me retornar e retornar apenas uma mensagem dizendo que a mesma não existe.

A forma que tentei foi:

if [ "$files" == "$MINHA_APLICACAO" ]
then
STATUS_ABC=`ps ax | grep $MINHA_APLICACAO | grep -v grep | grep -v $0 | awk '{print $1}'`
if [ -n "$STATUS_ABC" ]
then
echo "APLICACAO EXISTE, E ESTA EM EXECUCAO"
exit 0
elif [ ! -n "$STATUS_ABC" ]
then
INICIAR_APLICACAO
else
echo "APLICACAO NAO ENCONTRADA"
fi
fi

Porém, neste caso acima, se 50 arquivos são listados, ele retornará a mensagem "APLICACAO NAO ENCONTRADA", 50 vezes, sendo que só quero
receber a mensagem apenas uma vez! Ou seja, centenas de arquivos passarão por este loop, mas se o dito cujo não existir, ele me retorna
apenas uma mensagem "APLICACAO NAO ENCONTRADA".

Espero que entenderam minha dúvida..se não ficou claro podem perguntar que tento explicar novamente...

Valeu ninjas de plantão!


  


2. Re: script para condição de uma listagem [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 31/01/2011 - 15:31h

Cara, desculpa, mas sinceramente eu não entendi nada. Mas uma solução simples para envio das mensagens, não sei se te ajuda, seria vc enviar a mensagem:

"APLICACAO EXISTE, E ESTA EM EXECUCAO"
ou
"APLICACAO NAO ENCONTRADA"

Fora do loop...

Ficando assim:

OBS, estou usando os seus comandos:

if [ "$files" == "$MINHA_APLICACAO" ]
then
STATUS_ABC=`ps ax | grep $MINHA_APLICACAO | grep -v grep | grep -v $0 | awk '{print $1}'`
if [ -n "$STATUS_ABC" ]
then
echo "APLICACAO EXISTE, E ESTA EM EXECUCAO" > /tmp/nome_do_log_existe.log
exit 0
elif [ ! -n "$STATUS_ABC" ]
then
INICIAR_APLICACAO
else
echo "APLICACAO NAO ENCONTRADA" > /tmp/nome_do_log_NAO_EXISTE.log
fi
fi

cat /tmp/nome_do_log_NAO_EXISTE.log
cat /tmp/nome_do_log_existe.log

######

Ai vc pode fazer um if para verificar se existe ou não os arquivos.

if [ -e /tmp/nome_do_log_NAO_EXISTE.log ]; then echo existe; else echo erro; fi



3. explicando melhor..

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 31/01/2011 - 15:55h

OK, percebi que esta confuso! Vou explicar de uma forma mais simples:

Conteudo de 'arquivos.txt':

aplicacao_1
aplicacao_2
aplicacao_3
aplicacao_4
aplicacao_5

for i in `cat arquivos.txt`
do
if [ $i == "$parametro_1" ]
then
INICIAR_APLICACAO
else
echo "Aplicacao nao encontrada"
exit 1
fi
done

Agora, por exemplo: se em minha variavel $paramtro_1 estiver o nome "aplicacao_5" ele me retornará 4 vezes a mensagem "Aplicacao nao encontrada". Caso a variável $parametro_1 seja "aplicacao_6" eu receberei a mensagem "Aplicacao nao encontrada" 5 vezes na tela...a unica coisa que quero é receber esta mensagem ("Aplicacao nao encontrada") apenas uma vez. Ficou mais fácil entender agora?

Brigadao galera!


4. Re: script para condição de uma listagem [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 31/01/2011 - 16:53h

Então, acho que o que eu te respondi, resolva seu problema.

Talvez não seja o metodo mais bonito, não tem contador nem nada, mas funciona

Conteudo de 'arquivos.txt':

aplicacao_1
aplicacao_2
aplicacao_3
aplicacao_4
aplicacao_5

for i in `cat arquivos.txt`
do
if [ $i == "$parametro_1" ]
then
INICIAR_APLICACAO
else
echo "Aplicacao nao encontrada" > /tmp/nome_do_log_existe.log

#aqui cada vez que passar pelo else vai jogar a informação subscrevendo pois possui somente um > "Aplicacao nao encontrada" no arquivo /tmp/nome_do_log_existe.log

exit 1
fi
done

no final, depois do loop, da um cat no arquivo, que vc tera a mensagem apenas uma unica vez.


5. Espero que ajude...

Ricardo Lino Olonca
ricardoolonca

(usa Debian)

Enviado em 31/01/2011 - 17:43h

grep $parametro arquivos.txt
if [ $? -eq 0 ] then

ps wax | grep $parametro | grep -v grep
if [ $? -eq 0 ] then
echo Existe e esta em execucao
exit 0
else
sh $parametro
exit 1
fi

else
echo Aplicacao nao existe


6. Re: script para condição de uma listagem [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 31/01/2011 - 21:46h

Caso queiras avisar se nenhuma aplicação existe faça a contagem e um if dentro do for e fora dele faça a verificação e exiba a mensagem apropriada.

for ARQ in $(ls $EXTENSAO); do
...
if [ ${#ARQ} -gt 1 ]; then
CONT=CONT+1
fi
...
done

if [ $CONT -gt 1 ]; then
echo 'NENHUMA APLICAÇÃO ENCONTRADA.'
else
echo "FORAM ENCONTRADAS $CONT APLICAÇÕES."
fi


7. consegui finalizar!!!

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 01/02/2011 - 14:15h

Pessoal, consegui fazer um esquema que me quebrasse o galho para este caso! Sei que minha explicação ficou meio confusa, pois não tive tempo de elaborar algo tão explicativo.
Valeu aos ninjas que deram idéias e pude tirar outras conclusões para o que queria.
Segue abaixo o script finalizado com a condição que queria!
valeu!


if [ "$files" == "$MINHA_APLICACAO" ]
then
STATUS_ABC=`ps ax | grep $MINHA_APLICACAO | grep -v grep | grep -v $0 | awk '{print $1}'`
if [ -n "$STATUS_ABC" ]
then
echo "APLICACAO EXISTE, E ESTA EM EXECUCAO"
exit 0
else
INICIAR_APLICACAO
fi
else
INST="FALSE"
fi

if [ "$INST" == "FALSE" ]
then
echo "APPLICATION $V_INST NOT FOUND"
exit 1
fi




  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts