मुझे एक टाइमर की आवश्यकता थी जो स्क्रिप्ट की बहुत शुरुआत में शुरू होगा और अंत में बंद हो जाएगा।
time yourprogram.shउस @ मारी कोतोफ़ाना ने समझाया
मुझे एक टाइमर की आवश्यकता थी जो स्क्रिप्ट की बहुत शुरुआत में शुरू होगा और अंत में बंद हो जाएगा।
time yourprogram.shउस @ मारी कोतोफ़ाना ने समझाया
जवाबों:
यदि आप शीर्ष उपयोग में सेकंड में अवधि चाहते हैं
start=$SECONDS
और अंत में
duration=$(( SECONDS - start ))
आप लिनक्स की अंतर्निहित timeकमांड का उपयोग कर सकते हैं । आदमी पृष्ठ से:
समय सीमा [तर्क]
समय निर्धारित करता है कि स्ट्रिंग FORMAT से COMMAND द्वारा उपयोग किए जाने वाले संसाधनों के बारे में कौन सी जानकारी प्रदर्शित करनी है। यदि कमांड लाइन पर कोई प्रारूप निर्दिष्ट नहीं किया गया है, लेकिन टाइम पर्यावरण चर सेट किया गया है, तो इसका मान प्रारूप के रूप में उपयोग किया जाता है।
cleanup.shस्क्रिप्ट का समय पर उपयोग करने के लिए:
$ time cleanup.sh
timeआप उपयोग कर रहे हैं। hackernoon.com/…
मुझे लगता है कि यह एक बहुत पुराना प्रश्न है, लेकिन यही वह तरीका है जब मैं इसे किसी भी चीज के लिए करता हूं जब मैं चाहता हूं / यह जानने की आवश्यकता होती है कि कुछ चलाने में कितना समय लगा।
बैश में आंतरिक चर नाम के रूप में एक अंतर्निहित सेकंड टाइमर होता है SECONDS(देखें: अन्य आंतरिक चर के लिए यहां )
SECONDS=0इससे पहले कि आप रन समय की जाँच कर रहे हैं रखो । अच्छा परिणाम प्राप्त करने के लिए किसी भी उपयोगकर्ता इनपुट के बाद होना चाहिए, इसलिए यदि आप जानकारी के लिए संकेत कर रहे हैं, तो प्रॉम्प्ट के बाद इसे डाल दें।
फिर, इसे आप जो जाँच रहे हैं उसके अंत में रखें:
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
यदि आप केवल सेकंड में समय जानना चाहते हैं, तो आप उपरोक्त को सरल बना सकते हैं:
echo "Completed in $SECONDS seconds"
उदहारण के लिए:
read -rp "What's your name? " "name"
SECONDS=0
echo "Hello, $name"
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
date +%T -d "1/1 + $SECONDS sec"(24 घंटों से भी कम समय तक ही सीमित है, लेकिन आप दिन भी जोड़ने के लिए अनुकूलित कर सकते हैं)
#!/bin/bash
start=$(date +%s)
#
# do something
sleep 10
#
#
end=$(date +%s)
seconds=$(echo "$end - $start" | bc)
echo $seconds' sec'
echo 'Formatted:'
awk -v t=$seconds 'BEGIN{t=int(t*1000); printf "%d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
@anask इस जवाब के लिए एक चतुर समाधान करते हैं, बस मैं $SECONDSएक नया बनाने के बजाय देशी का उपयोग करने की सलाह देता हूं
awk -v t=$SECONDS 'BEGIN{t=int(t*1000); printf "Elapsed Time (HH:MM:SS): %d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
printfऔर विभाजन का उद्देश्य संबंधित सेकंड्स, मिन्स, सेक्स से संबंधित बीता हुआ सेकंड को परिवर्तित करना है।
timeकमांड (समय ।/cript.sh), वर्तमान समय का उपयोग प्रिंटआउट करने के लिएdateऔर इसी तरह।