Saya membutuhkan penghitung waktu yang akan dimulai pada awal skrip dan berhenti di akhir.
time yourprogram.sh
:, itulah yang dijelaskan oleh @Marius Cotofana
Saya membutuhkan penghitung waktu yang akan dimulai pada awal skrip dan berhenti di akhir.
time yourprogram.sh
:, itulah yang dijelaskan oleh @Marius Cotofana
Jawaban:
Jika Anda menginginkan durasinya dalam hitungan detik, gunakan di bagian atas
start=$SECONDS
dan pada akhirnya
duration=$(( SECONDS - start ))
Anda dapat menggunakan time
perintah bawaan Linux . Dari halaman manual:
waktu PERINTAH [argumen]
waktu menentukan informasi yang akan ditampilkan tentang sumber daya yang digunakan oleh PERINTAH dari string FORMAT. Jika tidak ada format yang ditentukan pada baris perintah, tetapi variabel lingkungan TIME diatur, nilainya digunakan sebagai format.
Untuk menentukan waktu cleanup.sh
skrip, gunakan:
$ time cleanup.sh
time
Anda menggunakan. hackernoon.com/...
Saya menyadari ini adalah pertanyaan yang cukup lama tetapi ini adalah cara saya melakukannya untuk apa pun ketika saya ingin / perlu tahu berapa lama sesuatu berjalan.
Bash memiliki penghitung waktu bawaan dalam bentuk variabel internal bernama SECONDS
(lihat: di sini untuk variabel internal lainnya)
Taruh SECONDS=0
sebelum apa pun yang Anda periksa waktu menjalankan. Perlu setelah input pengguna apa pun untuk mendapatkan hasil yang baik jadi jika Anda meminta informasi, letakkan setelah prompt.
Lalu, letakkan ini di akhir yang Anda periksa:
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
Jika Anda hanya ingin mengetahui waktu dalam hitungan detik, Anda dapat menyederhanakan hal di atas menjadi:
echo "Completed in $SECONDS seconds"
Sebagai contoh:
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"
(terbatas hingga kurang dari 24 jam, tetapi Anda juga dapat beradaptasi untuk menambah hari)
#!/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 lakukan solusi cerdas untuk jawaban ini, hanya saya rekomendasikan untuk menggunakan yang asli $SECONDS
sebagai gantinya untuk membuat yang baru
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}'
Tujuan dari printf
dan divisi ini adalah untuk mengkonversi detik yang telah berlalu menjadi Jam kesatuan, Menit, Menit, yang terkait.
time
perintah (waktu ./script.sh), untuk mencetakdate
perintah waktu saat ini gunakan dan sebagainya.