GNU/Linux >> Linux Esercitazione >  >> Linux

Come sapere se una durata è superiore a un'ora su più script di shell?

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.


Linux
  1. Come installare più distribuzioni Linux su una USB

  2. Come eliminare i privilegi di root negli script della shell?

  3. Come fare eco a una nuova riga negli script di Bash Shell

  4. Come usare il comando su su adb shell?

  5. Come gzippare più file in un unico file gz?

Come creare script di shell

Come utilizzare gli input negli script della shell

Come eseguire più comandi Linux in un unico comando

Come unire più file PDF in un unico PDF in Linux

Come utilizzare if-else negli script della shell?

Come leggere gli argomenti della riga di comando negli script della shell?