2010-12-14 9 views
9

में प्रारंभ तिथि से लेकर अंतिम तिथि तक लूप ओएस एक्स (हिम तेंदुए) पर डेट फ़ंक्शन में जीएनयू संस्करण की तरह डेट विकल्प नहीं है और मैं यह समझने में सक्षम नहीं हूं कि कैसे प्राप्त करें ओएस एक्स पर निम्नलिखित के बराबर:मैक ओएस एक्स शैल स्क्रिप्ट

startdate=2010-01-01 
enddate=2010-01-31 
foldate="$startdate" 

until [ "$foldate" == "$enddate" ] 
do 
    # do something with the date here - like pass it as a parameter to a command 
    foldate=`/bin/date --date "$foldate 1 day" +%Y-%m-%d` 
done 

SiegeX से जवाब के साथ हल:

startdate=2010-01-01 
enddate=2010-01-31 

sDateTs=`date -j -f "%Y-%m-%d" $startdate "+%s"` 
eDateTs=`date -j -f "%Y-%m-%d" $enddate "+%s"` 
dateTs=$sDateTs 
offset=86400 

while [ "$dateTs" -le "$eDateTs" ] 
do 
    date=`date -j -f "%s" $dateTs "+%Y-%m-%d"` 
    printf '%s\n' $date 
    dateTs=$(($dateTs+$offset)) 
done 
+0

यह देखने के लिए खुशी हुई कि आपके लिए काम कर रहा है। मुझे यकीन नहीं है कि 'बैश' ओएसएक्स के किस संस्करण में है (यदि यह भी बैश है), लेकिन अगर ऐसा होता है तो आपको 'sDateTs = $ (date -j -f 'जैसे बैकटीक्स के बजाय अपने आदेशों को' $() 'में लपेटना चाहिए ...) 'और डबल ब्रैकेट्स का उपयोग करें [['' एक के बजाय' [''आप [' "$ dateTS" <"$ eDateTs"]] ' – SiegeX

उत्तर

1

man date चलाकर अपने तिथि के मैनपेज पढ़ें और -v विकल्प को देखो। यहाँ एक अंश है:

-v समायोजित (यानी, आज की तारीख लेने के लिए और का परिणाम समायोजन प्रदर्शित करते हैं, नहीं वास्तव में तिथि निर्धारित) दूसरा, मिनट, घंटे, महीने के दिन, सप्ताह के दिन, महीने या साल वैल के अनुसार। यदि वैल प्लस या माइनस साइन से पहले है, तो तिथि के अनुसार शेष स्ट्रिंग में समायोजित है, अन्यथा दिनांक का प्रासंगिक भाग सेट है। तिथि हो सकती है जितनी बार इन झंडे का उपयोग करके आवश्यकतानुसार समायोजित किया जा सकता है। दिए गए क्रम में संसाधित हैं।

+1

घेराबंदी करते समय' कर सकते हैं, मैंने ऐसा किया, लेकिन यह नहीं समझा जा सकता मैं उस विकल्प के साथ तिथि के आउटपुट के अलावा कुछ और कैसे बदलूंगा। दूसरे शब्दों में, मैं डेट-जे-वी + 1 डी के साथ "अब" में एक दिन जोड़ सकता हूं, लेकिन मैं एक दिन को मनमाने ढंग से कैसे जोड़ूं? –

+0

-v के साथ समस्या "वर्तमान दिनांक ले लो ..." (मैनपेज और ऊपर से)। मैं वर्तमान तारीख को संशोधित नहीं करना चाहता, मुझे एक मनमानी तिथि को संशोधित करने की आवश्यकता है - जिसे मैं निर्दिष्ट करता हूं। –

+0

@hglattergotz एकमात्र चीज जैसा दिखता है जो आप कर सकते हैं वर्तमान दिनांक को एक चर में सहेजने के लिए, तिथि को $ foldate पर सेट करें और उस से ऑफ़सेट प्राप्त करने के लिए '-v' का उपयोग करें। अंत में तिथि को इसके मूल मूल्य – SiegeX