Script

1. Script

Felipe Lyra Cardoso Teles Ferreira
FelipeLyra

(usa Ubuntu)

Enviado em 12/05/2015 - 14:47h

Olá ...
Comecei a pouco tempo a programar no Shell e tenho alguma dúvidas básicas.
Estou tentado fazer um programa para determinar os horários em que um outro script vai ser executado.
Por exemplo:
Quero que meu programa rode o script quando os minutos forem iguais a 02,17,32 e 47.

Eu botei assim:
#!/bin/bash

#Programa para rodar o script TSM_Octave.m

Minuto=`date|cut -d":" -f 2`

if [ echo $Minuto -eq '02']|[ echo $Minuto -eq '17']|[ echo $Minuto -eq '32']|[ echo $Minuto -eq '47']
then
octave /home/mcidas/Desktop/TSM_Octave.m
fi

Só que acontecem erros:
mcidas@mcidas:~$ sh -x TSM_Octave.sh
+ date
+ cut -d: -f 2
+ Minuto=25
+ [ echo 25 -eq 02]
TSM_Octave.sh: 7: [: missing ]
+ [ echo 25 -eq 47]
+ TSM_Octave.sh: 7: [: missing ][
echo 25 -eq 17]
TSM_Octave.sh: 7: [: missing ]
+ [ echo 25 -eq 32]
TSM_Octave.sh: 7: [: missing ]
Como posso fazer com que ele fique rodando e não aconteçam esses erros ?

Desde já, obrigado.
Sds.


  


2. Re: Script

Joao Vitorino
Joao_Vitorino

(usa Red Hat)

Enviado em 12/05/2015 - 15:56h

FelipeLyra escreveu:

Olá ...
Comecei a pouco tempo a programar no Shell e tenho alguma dúvidas básicas.
Estou tentado fazer um programa para determinar os horários em que um outro script vai ser executado.
Por exemplo:
Quero que meu programa rode o script quando os minutos forem iguais a 02,17,32 e 47.

Eu botei assim:
#!/bin/bash

#Programa para rodar o script TSM_Octave.m

Minuto=`date|cut -d":" -f 2`

if [ echo $Minuto -eq '02']|[ echo $Minuto -eq '17']|[ echo $Minuto -eq '32']|[ echo $Minuto -eq '47']
then
octave /home/mcidas/Desktop/TSM_Octave.m
fi

Só que acontecem erros:
mcidas@mcidas:~$ sh -x TSM_Octave.sh
+ date
+ cut -d: -f 2
+ Minuto=25
+ [ echo 25 -eq 02]
TSM_Octave.sh: 7: [: missing ]
+ [ echo 25 -eq 47]
+ TSM_Octave.sh: 7: [: missing ][
echo 25 -eq 17]
TSM_Octave.sh: 7: [: missing ]
+ [ echo 25 -eq 32]
TSM_Octave.sh: 7: [: missing ]
Como posso fazer com que ele fique rodando e não aconteçam esses erros ?

Desde já, obrigado.
Sds.



Algumas considerações aqui:


Minuto=`date|cut -d":" -f 2`


Creio que o certo seria

Minuto=`date |cut -d":" -f2`

Com um espaço entre date e "|"

Não é necessário um "echo $Minuto" para fazer a comparação e é necessário colocar o espaço nos lugares certo (note que coloquei um espaço antes e depois de "[" e "]". Repare também que o "ou" lógico é com dois "||"

if [ $Minuto -eq '02' ] || [ $Minuto -eq '17'] || [ $Minuto -eq '32' ] || [ $Minuto -eq '47' ]  


E agora a consideração mais importante.
Se você está escrevendo esse script com intuitos acadêmicos, tudo bem, mas caso contrário seu script não vai funcionar (por favor não leve a mal).

Vamos a lógica.
Você criou esse script para executar outro script em determinados minutos de uma hora correto? Para isso acontecer, seu script tem que ficar constantemente monitorando a hora para saber quando ele deve ser executado e para funcionar dessa forma - me corrijam se eu estiver errado - a única maneira é fazer esse script rodar como um serviço do linux.
Não faz sentido para mim alguém chegar e falar: "Ei, são 14h17m. hora de rodar o script". Ai chega na telinha preta e roda um script que verifica se realmente é 14h17m para rodar outro script. LOL

Solução simples. Coloca esse script TSM_Octave.m para rodar direto no cron do linux.







3. Re: Script

Leandro Bernardo
leandro.bernardo

(usa Debian)

Enviado em 12/05/2015 - 18:03h


Não seria mais fácil usar o cron pra esse agendamento ?


4. Re: Script

Wagner Souza
wagnerfs

(usa Fedora)

Enviado em 12/05/2015 - 23:07h

Boa noite.

Prezado Felipe, o teu código está bem bagunçado. É de fundamental importância ter um código limpo o otimizado. Sugiro você dar uma olhada neste artigo que escrevi para lhe ajudar nos primeiros passos em Shell Script http://www.vivaolinux.com.br/artigo/Algoritmos-em-Shell-Script?pagina=1.

Como os colegas já mencionaram, uma solução rápida é fazer o agendamento deste script pelo cron, porém, abaixo, segue um script de teste que fiz. Analise e modifica à sua necessidade:

#!/bin/bash


while [ 1 ];
do

Minuto=$(date +%M)

if [ $Minuto -eq 02 -o $Minuto -eq 17 -o $Minuto -eq 32 -o $Minuto -eq 47 ];
then
echo "Script funcionando" >> /tmp/teste
fi

sleep 60

done


A cada um minuto, o script será executado realizando o teste e escrevendo em um arquivo de texto. No seu caso, é só trocar pela linha de execução do programa. Espero ter ajudado.

_________________________
Wagner F. de Souza
Graduado em Redes de Computadores
"GNU/Linux for human beings."
LPI ID: LPI000297782



5. Re: Script

Felipe Lyra Cardoso Teles Ferreira
FelipeLyra

(usa Ubuntu)

Enviado em 13/05/2015 - 11:23h

Obrigado galera !
Todos foram de grande ajuda !







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts