Tôi cần một bộ đếm thời gian sẽ bắt đầu ở phần đầu của kịch bản và dừng ở cuối.
time yourprogram.sh
, mà @Marius Cotofana đã giải thích
Tôi cần một bộ đếm thời gian sẽ bắt đầu ở phần đầu của kịch bản và dừng ở cuối.
time yourprogram.sh
, mà @Marius Cotofana đã giải thích
Câu trả lời:
Nếu bạn muốn thời lượng tính bằng giây, hãy sử dụng hàng đầu
start=$SECONDS
Và cuối cùng
duration=$(( SECONDS - start ))
Bạn có thể sử dụng lệnh tích hợp của Linux time
. Từ trang người đàn ông:
thời gian điều khiển [đối số]
thời gian xác định thông tin nào sẽ hiển thị về các tài nguyên được sử dụng bởi LỰA CHỌN từ chuỗi FORMAT. Nếu không có định dạng nào được chỉ định trên dòng lệnh, nhưng biến môi trường TIME được đặt, giá trị của nó được sử dụng làm định dạng.
Để tính thời gian cho cleanup.sh
tập lệnh, sử dụng:
$ time cleanup.sh
time
bạn đang sử dụng. hackernoon.com/ Quảng cáo
Tôi nhận ra đây là một câu hỏi khá cũ nhưng đây là cách tôi làm cho bất cứ điều gì khi tôi muốn / cần biết một cái gì đó mất bao lâu để chạy.
Bash có bộ đếm thời gian tích hợp giây dưới dạng một biến nội bộ có tên SECONDS
(xem: ở đây để biết các biến nội bộ khác)
Đặt SECONDS=0
trước bất cứ điều gì bạn đang kiểm tra thời gian chạy. Nó cần phải theo sau bất kỳ đầu vào của người dùng để có kết quả tốt, vì vậy nếu bạn đang nhắc thông tin, hãy đặt nó sau (các) dấu nhắc.
Sau đó, đặt phần này vào cuối phần bạn đang kiểm tra:
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
Nếu bạn chỉ muốn biết thời gian tính bằng giây, bạn có thể đơn giản hóa phần trên để:
echo "Completed in $SECONDS seconds"
Ví dụ:
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"
(giới hạn dưới 24 giờ, nhưng bạn cũng có thể thích nghi để thêm ngày)
#!/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 làm một giải pháp thông minh cho câu trả lời này, chỉ là tôi khuyên bạn nên sử dụng bản địa $SECONDS
thay thế để tạo một cái mới
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}'
Mục đích của printf
phân chia và là để chuyển đổi các giây trôi qua thành các giờ thống nhất tương ứng, Phút, Giây, tương ứng.
time
lệnh (time ./script.sh), để indate
lệnh sử dụng thời gian hiện tại , v.v.