GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit, zda je trvání u více skriptů Shell delší než jedna hodina?

Snažím se zkontrolovat dobu běhu a pokud je to více než hodinu, vrátím chybu, ale kód občas vrací falešné poplachy. V firstRun.sh , čtu čas jako:

export START_H=`date +%H`
export START_M=`date +%m`

a v secondRun.sh Kontroluji čas následovně:

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

Může mi někdo pomoci najít, kde by mohl být problém? Je nějaký rozdíl mezi použitím && a -a v prohlášení if? Nebo jakýkoli rozdíl mezi použitím [] a () ?

Přijatá odpověď:

export BOOT_TIME=$(date +%s)
current=$(date +%s)
(( current - BOOT_TIME >3600 ))  && echo "More than an hour"

%s vrátí sekundy od 1970-01-01 00:00:00 UTC.

Diskuse:proč jsou sekundy lepší

Předpokládejme například, že čas spuštění (bootování) je 23:00 a aktuální čas je 00:23. Poté $TIME je negativní a nebude to fungovat:

if [ $TIME -gt 0 ] && [ $START_M -lt $CURRENT_M ]; then
    echo "boot time is more than an hour"
fi

Podobně předpokládejme, že čas začátku je 12:03 a aktuální čas je 14:00. Potom nebude fungovat ani výše uvedené, tentokrát kvůli minutovému testu.


Linux
  1. Co jsou Shell Scripts? Jak vytvořit Shell skripty?

  2. Jak poznám, že jsem na obrazovce?

  3. Jak extrahovat dobu trvání z výstupu ffmpeg?

  1. Jak používat vstupy ve skriptech shellu

  2. Jak nainstalovat více distribucí Linuxu na jedno USB

  3. Jak gzipovat více souborů do jednoho souboru gz?

  1. Jak zrušit kořenová oprávnění ve skriptech Shell?

  2. Sdílení proměnných ve více skriptech Shell?

  3. Jak otestovat shodu skriptů Shell s Posix?