Preciso verificar a hora atual e abortar o script, se não for a hora adequada do dia em que devo executá-lo. Além disso, se alguém o executar, deve abortar.
Por exemplo: preciso que meu script seja executado apenas se for iniciado entre 22h e 2h (uma janela de 4 horas).
Atualmente, estou fazendo o seguinte. Tomando o tempo date +%k%M
e comparando com números codificados
#!/bin/sh
currTime=`date +%k%M`
check_time_to_run()
{
tempTime=$1
if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then
echo "Time is between 2 AM and 10 PM. Aborting."
exit 1
else
echo "Time is after 10 PM and before 2 AM. Running normally."
fi
}
check_time_to_run $currentTime
Eu gostaria de saber se existe algum outro método eficiente com relação à comparação de tempos em sh
ou bash
?
date +%s
.currTime=$(date +%s); lower=$(date +%s --date="2:00"); upper=$(date +%s --date="22:00"); if [$currTime -gt $lower -a $currTime -lt $upper]; then
…faketime
, seu script não é muito seguro. Usar lockfiles é provavelmente uma opção melhor.Respostas:
Isso parece perfeito para mim. O que faz você pensar que deveria ser melhorado?
De qualquer forma, maneiras de melhorá-lo podem ser:
zsh
ouksh93
gawk
(que é menor que o bash, mas não que o traço, mas pode evitar o garfo extra):Exemplo:
fonte
Se ferramentas externas forem permitidas, convém verificar
dateutils
.Seu "script" se torna:
Disclaimer: Eu sou o autor da referida ferramenta.
fonte