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 – Směrovací tabulka „220“ V linuxovém jádře 3.2.0-23-generic?
Rozdíl mezi potrubím a rozšířením příkazů?