Мені потрібен був таймер, який запуститься на самому початку сценарію і зупиниться в кінці.
time yourprogram.sh
що @Marius Cotofana пояснив
Мені потрібен був таймер, який запуститься на самому початку сценарію і зупиниться в кінці.
time yourprogram.sh
що @Marius Cotofana пояснив
Відповіді:
Якщо ви хочете тривалість у секундах, використовуйте верхню частину
start=$SECONDS
і в кінці
duration=$(( SECONDS - start ))
Ви можете використовувати вбудовану time
команду Linux . На чоловіковій сторінці:
час COMMAND [аргументи]
час визначає, яку інформацію відображати про ресурси, які використовує КОМАНДА, з рядка FORMAT. Якщо в командному рядку не вказаний формат, але встановлена змінна середовища TIME, його значення використовується як формат.
Щоб вчасно cleanup.sh
скрипт використати:
$ time cleanup.sh
time
ви використовуєте. hackernoon.com/…
Я усвідомлюю, що це досить старе питання, але це те, як я це роблю для будь-чого, коли хочу / потрібно знати, як довго щось потрібно пробігти.
Bash має вбудований таймер секунд у вигляді внутрішньої змінної з ім'ям 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
команду використання робочого часу скрипта (time ./script.sh), роздрукуватиdate
команду використання поточного часу тощо.