Bash
比較時間的好方法?
我需要檢查目前時間併中止腳本,如果它不是我應該執行它的正確時間。此外,如果其他人執行它,它應該中止。
例如:我需要我的腳本僅在晚上 10 點到凌晨 2 點(4 小時視窗)之間啟動時執行。
目前我正在做以下事情。花時間
date +%k%M
與硬編碼數字進行比較#!/bin/sh currTime=`date +%k%M` check_time_to_run() { tempTime=$1 if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then echo "Time is between 2 AM and 10 PM. Aborting." exit 1 else echo "Time is after 10 PM and before 2 AM. Running normally." fi } check_time_to_run $currentTime
我想知道在時間比較方面是否有任何其他有效的
sh
方法bash
?
這對我來說看起來很完美。是什麼讓您認為它應該改進?
無論如何,改進它的方法可能是:
- 使用比 bash 更小、更快的 shell,例如 dash 或 pdksh。
- 使用具有內置日期功能的外殼,例如
zsh
或ksh93
- 使用
gawk
(它比 bash 小,但不比 dash 但可以避免額外的 fork):例子:
#! /usr/bin/gawk -f BEGIN {now = strftime("%k%M")+0; exit(now > 200 && now < 2200)}
如果允許使用外部工具,您可能需要檢查
dateutils
.您的“腳本”變為:
if dtest time --gt '02:00:00' && dtest time --lt '22:00:00'; then echo "Time is between 2 AM and 10 PM. Aborting." fi
免責聲明:我是該工具的作者。