Bagaimana cara menggunakan timer di bash?


30

Saya membutuhkan penghitung waktu yang akan dimulai pada awal skrip dan berhenti di akhir.


2
tolong, tulis tujuan yang ingin Anda capai. untuk mengukur skrip waktu kerja gunakan timeperintah (waktu ./script.sh), untuk mencetak dateperintah waktu saat ini gunakan dan sebagainya.
buru


Gunakan dasar linux cmd time yourprogram.sh:, itulah yang dijelaskan oleh @Marius Cotofana
Martijn van Wezel

Jawaban:



23

Anda dapat menggunakan timeperintah 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.shskrip, gunakan:

$ time cleanup.sh

1
Ketahuilah bahwa timeAnda menggunakan. hackernoon.com/...
km6zla

8

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=0sebelum 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

3
Pintasan untuk mereka yang tidak menginginkan format waktu yang rumit: date +%T -d "1/1 + $SECONDS sec"(terbatas hingga kurang dari 24 jam, tetapi Anda juga dapat beradaptasi untuk menambah hari)
xhienne

1
#!/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}'

1
Hai, selamat datang di Unix SE! Jawaban hanya kode tidak terlihat sangat baik, mungkin Anda bisa menjelaskan apa yang sedang dilakukan skrip Anda.
peterh mengatakan mengembalikan Monica

0

@anask lakukan solusi cerdas untuk jawaban ini, hanya saya rekomendasikan untuk menggunakan yang asli $SECONDSsebagai 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 printfdan divisi ini adalah untuk mengkonversi detik yang telah berlalu menjadi Jam kesatuan, Menit, Menit, yang terkait.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.