Senaryonun en başında başlayacak ve sonunda duracak bir zamanlayıcıya ihtiyacım vardı.
time yourprogram.sh
, bu @Marius Cotofana açıkladı
Senaryonun en başında başlayacak ve sonunda duracak bir zamanlayıcıya ihtiyacım vardı.
time yourprogram.sh
, bu @Marius Cotofana açıkladı
Yanıtlar:
Süreyi saniye cinsinden görmek istiyorsanız, üst kullanımda
start=$SECONDS
ve sonunda
duration=$(( SECONDS - start ))
Linux'un yerleşik time
komutunu kullanabilirsiniz. Man sayfasından:
zaman COMMAND [argümanlar]
Zaman, COMMAND tarafından FORMAT dizesinden kullanılan kaynaklar hakkında hangi bilgilerin görüntüleneceğini belirler. Komut satırında herhangi bir format belirtilmemişse, ancak TIME ortam değişkeni ayarlanmışsa, değeri format olarak kullanılır.
cleanup.sh
Komut dosyasını zamanlamak için şunu kullanın:
$ time cleanup.sh
time
. hackernoon.com/…
Bunun çok eski bir soru olduğunun farkındayım, ancak bir şeyin ne kadar sürdüğünü bilmek istediğim / ihtiyaç duyduğumda herhangi bir şey için yapmamın yolu budur.
Bash adında bir dahili değişken biçiminde yerleşik bir saniye sayacı vardır SECONDS
(bakınız: diğer dahili değişkenler için burada )
SECONDS=0
Çalışma zamanını ne kontrol ediyorsan önce koy . İyi bir sonuç elde etmek için herhangi bir kullanıcı girişinden sonra gelmesi gerekir; bu nedenle, sizden bilgi isterseniz, bilgi istemi üzerine yazınız.
Ardından, kontrol ettiğiniz şeyin sonuna şunu koyun:
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
Süreyi yalnızca saniye cinsinden bilmek istiyorsanız, yukarıdakileri basitleştirebilirsiniz:
echo "Completed in $SECONDS seconds"
Örnek olarak:
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 saatten daha az bir süre ile sınırlı, ancak siz de gün eklemek için uyarlayabilirsiniz)
#!/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 bu cevap için akıllıca bir çözüm yapar, sadece $SECONDS
yeni bir tane oluşturmak için yerel dili kullanmanızı öneririm
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}'
Ve printf
bölümün amacı, geçen saniyeleri karşılık gelen birlik Saat'e dönüştürmek, Mins, Secs.
time
(saat ./script.sh), geçerli saatin çıktısını almak içindate
komut vb.