anonymous@RULINUX.NET~# Last login: 2024-11-18 09:32:50
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

libeta.sh

Вы меня извините, но я тут написал библиотечку для sh-скриптов для вычисления оставшегося времени выполнения (ETA).

Код библиотеки:

bash
#!/bin/sh

# Функции для расчёта времени ожидаемого окончания
# функции:
#               ETA_init
#               ETA
# переменные:
#               ETA_COUNT
#               ETA_BEGIN_TIME
#               ETA_NEW_TIME
#               ETA_ELAPSED_TIME
#               ETA_EXPECTED_TIME
#               ETA

# инициализация таймера
# входные параметры:
#       $1 - общее количество итераций
# выходные параметры:
#       нет
function ETA_init ()
{
        if [ $# -eq 1 ]; then
                ETA_COUNT=$1
                ETA_BEGIN_TIME=$(date +%s)
        else
                echo "Некорректный вызов функции ETA_init" > 2
                ETA_COUNT=1
                ETA_BEGIN_TIME=1
        fi
}

function ETA ()
{
        if [ $# -eq 1 ]; then
                ETA_NEW_TIME=$(date +%s)
                ETA_ELAPSED_TIME=$((${ETA_NEW_TIME}-${ETA_BEGIN_TIME}))
                ETA_EXPECTED_TIME=$((${ETA_ELAPSED_TIME}*${ETA_COUNT}/${1}))
                ETA="$((${ETA_EXPECTED_TIME}-${ETA_ELAPSED_TIME})) sec."
        else
                echo "Некорректный вызов функции ETA_calculate" > 2
                ETA="NaN"
        fi
}
 


Пример использования (он же код для проверки работоспособности вышеприведённой реализации):

bash
#!/bin/sh

# подключение libeta.bash
source ~/bin/libeta.bash

COUNT=$(ls -1 | wc -l)
n=1
ETA_init ${COUNT}

for f in *
do
        echo -ne "[${n}/${COUNT}] $f... "
        sleep 2
        ETA $n
        echo -e "done (ETA=${ETA} sec.)"
        n=$((${n}+1))
done
 

anonymous(*) (2013-11-14 20:56:38)
Отредактировано anonymous по причине "не указана"

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: libeta.sh от anonymous 2013-11-14 20:56:38
avatar
Скрыть

Re:libeta.sh

Я не понял как оно выполняет rm -rf

Dr.uid(*)(2013-11-14 21:27:22)

Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0
[#] [Добавить метку] [Редактировать] Ответ на: libeta.sh от anonymous 2013-11-14 20:56:38
avatar
Скрыть

Re:libeta.sh

Изменил формат оставшегося времени. Теперь выводится в виде [hh:]mm:ss

bash

#!/bin/sh

# Функции для расчёта времени ожидаемого окончания
# функции:
#               ETA_init
#               ETA
# переменные:
#               ETA_COUNT
#               ETA_BEGIN_TIME
#               ETA_NEW_TIME
#               ETA_ELAPSED_TIME
#               ETA_EXPECTED_TIME
#               ETA

# инициализация таймера
# входные параметры:
#       $1 - общее количество итераций (шагов)
# выходные параметры:
#       нет
function ETA_init ()
{
        if [ $# -eq 1 ]; then
                ETA_COUNT=$1
                ETA_BEGIN_TIME=$(date +%s)
        else
                echo "Некорректный вызов функции ETA_init" > 2
                ETA_COUNT=1
                ETA_BEGIN_TIME=1
        fi
}

# вычисление прогнозируемого оставшегося времени
# входные параметры:
#       $1 - текущая итерация (номер шага)
# выходные параметры:
#       нет
function ETA ()
#!/bin/sh

# Функции для расчёта времени ожидаемого окончания
# функции:
#               ETA_init
#               ETA
# переменные:
#               ETA_COUNT
#               ETA_BEGIN_TIME
#               ETA_NEW_TIME
#               ETA_ELAPSED_TIME
#               ETA_EXPECTED_TIME
#               ETA

# инициализация таймера
# входные параметры:
#       $1 - общее количество итераций (шагов)
# выходные параметры:
#       нет
function ETA_init ()
{
        if [ $# -eq 1 ]; then
                ETA_COUNT=$1
                ETA_BEGIN_TIME=$(date +%s)
        else
                echo "Некорректный вызов функции ETA_init" > 2
                ETA_COUNT=1
                ETA_BEGIN_TIME=1
        fi
}

# вычисление прогнозируемого оставшегося времени
# входные параметры:
#       $1 - текущая итерация (номер шага)
# выходные параметры:
#       нет
function ETA ()
{
        if [ $# -eq 1 ]; then
                local dT
                local dH # hours
                local dM # minutes
                local dS # seconds
                ETA_NEW_TIME=$(date +%s)
                ETA_ELAPSED_TIME=$((${ETA_NEW_TIME}-${ETA_BEGIN_TIME}))
                ETA_EXPECTED_TIME=$((${ETA_ELAPSED_TIME}*${ETA_COUNT}/${1}))
                dT=$((${ETA_EXPECTED_TIME}-${ETA_ELAPSED_TIME}))
                dH=$((${dT}/3600))
                dM=$(((${dT}-${dH}*3600)/60))
                dS=$((${dT}-${dH}*3600-${dM}*60))
                if [ ${dH} -gt 0 ]; then
                        ETA="$(printf "%02d:%02d:%02d" ${dH} ${dM} ${dS})"
                else
                        ETA="$(printf "%02d:%02d" ${dM} ${dS})"
                        #ETA="${dT} sec."
                fi
        else
                echo "Некорректный вызов функции ETA" > 2
                ETA="NaN"
        fi
}
 

anonymous(*)(2016-02-26 22:42:21)

Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!