GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo saber si una duración es superior a una hora en varios scripts de shell?

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.


Linux
  1. Cómo usar entradas en sus scripts de shell

  2. Cómo instalar múltiples distribuciones de Linux en un USB

  3. ¿Cómo eliminar los privilegios de raíz en los scripts de Shell?

  4. ¿Cómo probar el cumplimiento de Posix de los scripts de Shell?

  5. Cómo hacer eco de una nueva línea en Bash Shell Scripts

Cómo crear scripts de shell

Cómo ejecutar múltiples comandos de Linux en un solo comando

Cómo combinar varios archivos PDF en un solo PDF en Linux

¿Cómo usar if-else en Shell Scripts?

¿Cómo leer argumentos de línea de comando en scripts de Shell?

¿Cómo puedo copiar varios archivos sobre scp en un solo comando?