Necesito verificar la hora actual y abortar el script si no es la hora correcta del día en la que se supone que debo ejecutarlo. Además, si alguien más lo ejecuta, debería abortar.
Por ejemplo: necesito que mi script solo se ejecute si se inicia entre las 10 p.m. y las 2 a.m. (una ventana de 4 horas).
Actualmente estoy haciendo lo siguiente. Tomarse el tiempo date +%k%M
y comparar con 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
Me gustaría saber si hay algún otro método eficiente con respecto a la comparación de tiempo en sh
o 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
, su script no es muy seguro. Usar lockfiles es probablemente una mejor opción.Respuestas:
Eso me parece perfecto. ¿Qué te hace pensar que debería mejorarse?
De todos modos, las formas de mejorarlo podrían ser:
zsh
oksh93
gawk
(que es más pequeño que bash, pero no como dash, pero podría evitar la bifurcación adicional):Ejemplo:
fuente
Si se permiten herramientas externas, es posible que desee verificar
dateutils
.Su "guión" se convierte en:
Descargo de responsabilidad: soy el autor de dicha herramienta.
fuente