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.