Sto provando a controllare il tempo di esecuzione e se è più di un'ora restituisce un errore, ma il codice restituisce falsi positivi in modo intermittente. In firstRun.sh
, leggo l'ora come:
export START_H=`date +%H`
export START_M=`date +%m`
e in secondRun.sh
Controllo l'ora come segue:
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
Qualcuno può aiutarmi a trovare dove potrebbe essere il problema? C'è qualche differenza tra l'utilizzo di &&
e -a
nella dichiarazione if? O qualsiasi differenza tra l'utilizzo di []
e ()
?
Risposta accettata:
export BOOT_TIME=$(date +%s)
current=$(date +%s)
(( current - BOOT_TIME >3600 )) && echo "More than an hour"
%s
restituisce secondi dal 1970-01-01 00:00:00 UTC.
Discussione:perché i secondi sono migliori
Supponiamo, ad esempio, che l'ora di inizio (avvio) sia 23:00 e l'ora corrente sia 00:23. Quindi, $TIME
è negativo e questo non funzionerà:
if [ $TIME -gt 0 ] && [ $START_M -lt $CURRENT_M ]; then
echo "boot time is more than an hour"
fi
Allo stesso modo, supponiamo che l'ora di inizio sia 12:03 e l'ora corrente sia 14:00. Quindi, anche quanto sopra non funzionerà, questa volta a causa del test dei minuti.