समय की तुलना करने की अच्छी विधि?


10

मुझे वर्तमान समय की जांच करने और स्क्रिप्ट को निरस्त करने की आवश्यकता है यदि यह दिन का उचित समय नहीं है तो मुझे इसे चलाना चाहिए। इसके अलावा, अगर कोई और इसे चलाता है, तो उसे गर्भपात करना चाहिए।

उदाहरण के लिए: मुझे अपनी स्क्रिप्ट की आवश्यकता केवल तभी चलने के लिए होती है जब इसे 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?


1
यदि आपको दो तिथियों की तुलना करने की आवश्यकता है, तो उन्हें MJD या UNIX समय में बदलने की कोशिश करें, उदाहरण के लिए date +%s:।
Eddy_Em

1
@ नहीं, यह तारीख नहीं है, यह समय है जब मुझे तुलना करने की आवश्यकता है।
एमटीके

1
मुझे लगता है, सेकंड में यह बेहतर होगा: currTime=$(date +%s); lower=$(date +%s --date="2:00"); upper=$(date +%s --date="22:00"); if [$currTime -gt $lower -a $currTime -lt $upper]; then...
Eddy_Em

पटकथा को कोंट्रेब में क्यों नहीं रखा गया? इस तरह आप यह सुनिश्चित करते हैं कि यह उस विशिष्ट समय पर चलता है
BitsOfNix

1
जैसा कि कोई भी उपयोगकर्ता किसी प्रक्रिया के लिए समय बदल सकता है faketime, आपकी स्क्रिप्ट बहुत सुरक्षित नहीं है। लॉकफ़ाइल्स का उपयोग करना शायद एक बेहतर विकल्प है।
jofel

जवाबों:


6

जो मुझे सही लगता है। आपको क्या लगता है कि इसमें सुधार किया जाना चाहिए?

वैसे भी, इसे बेहतर बनाने के तरीके हो सकते हैं:

  • डैश या pdksh की तरह बैश की तुलना में एक छोटे, तेज खोल का उपयोग करें।
  • एक ऐसे शेल का उपयोग करें जिसमें डेट एबिलिटी बिल्ट इन जैसी हो zshयाksh93
  • उपयोग gawk(जो बश से छोटा है, लेकिन डैश से अधिक नहीं है, लेकिन अतिरिक्त कांटा से बच सकता है):

उदाहरण:

#! /usr/bin/gawk -f
BEGIN {now = strftime("%k%M")+0; exit(now > 200 && now < 2200)}

अच्छा ठीक है। बस यह पुष्टि करना चाहता था कि मैं जो कर रहा हूं वह क्रूड या बुराई नहीं है। सुझाव के लिए धन्यवाद।
एमटीके

4

यदि बाहरी उपकरणों की अनुमति है, तो आप जांच कर सकते हैं 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

डिस्क्लेमर: मैं उक्त टूल का लेखक हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.