Saya mencoba memeriksa waktu berjalan dan jika lebih dari satu jam mengembalikan kesalahan, tetapi kode mengembalikan positif palsu sebentar-sebentar. Di firstRun.sh
, saya membaca waktu sebagai:
export START_H=`date +%H`
export START_M=`date +%m`
dan di secondRun.sh
Saya memeriksa waktu sebagai berikut:
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
Adakah yang bisa membantu saya menemukan di mana masalahnya? Apakah ada perbedaan antara menggunakan &&
dan -a
dalam pernyataan if? Atau perbedaan antara menggunakan []
dan ()
?
Jawaban yang Diterima:
export BOOT_TIME=$(date +%s)
current=$(date +%s)
(( current - BOOT_TIME >3600 )) && echo "More than an hour"
%s
mengembalikan detik sejak 1970-01-01 00:00:00 UTC.
Diskusi:mengapa detik lebih baik
Misalkan, misalnya, waktu mulai (boot) adalah 23:00 dan waktu saat ini adalah 00:23. Kemudian, $TIME
negatif dan ini tidak akan berhasil:
if [ $TIME -gt 0 ] && [ $START_M -lt $CURRENT_M ]; then
echo "boot time is more than an hour"
fi
Demikian pula, misalkan waktu mulai adalah 12:03 dan waktu saat ini adalah 14:00. Kemudian, cara di atas juga tidak akan berhasil, kali ini karena tes menit.