Estoy tratando de verificar el tiempo de ejecución y, si es más de una hora, devuelve un error, pero el código devuelve falsos positivos de forma intermitente. En firstRun.sh
, leo el tiempo como:
export START_H=`date +%H`
export START_M=`date +%m`
y en secondRun.sh
Compruebo la hora de la siguiente manera:
CURRENT_H=`date +%H`
CURRENT_M=`date +%M`
TIME=`expr $CURRENT_H - $START_H`
if [ $TIME -gt 0 ] && [ $START_M -lt $CURRENT_M ]; then
echo "boot time is more than an hour"
fi
¿Alguien puede ayudarme a encontrar dónde podría estar el problema? ¿Hay alguna diferencia entre usar &&
y -a
en la declaración if? O cualquier diferencia entre usar []
y ()
?
Respuesta aceptada:
export BOOT_TIME=$(date +%s)
current=$(date +%s)
(( current - BOOT_TIME >3600 )) && echo "More than an hour"
%s
devuelve segundos desde 1970-01-01 00:00:00 UTC.
Discusión:por qué los segundos son mejores
Suponga, por ejemplo, que la hora de inicio (arranque) es a las 23:00 y la hora actual es a las 00:23. Luego, $TIME
es negativo y esto no funcionará:
if [ $TIME -gt 0 ] && [ $START_M -lt $CURRENT_M ]; then
echo "boot time is more than an hour"
fi
De manera similar, suponga que la hora de inicio es 12:03 y la hora actual es 14:00. Entonces, lo anterior tampoco funcionará, esta vez debido a la prueba de minutos.