Как да създадем лентата за прогреса-напредъка в Bash?

Bash е мощен и универсален език за програмиране на команден ред, който се използва широко в Linux и Unix системите. Лентата за напредъка (progress bar) е полезен инструмент, който може да се използва за да даде на потребителите необходимата информация за напредъка на извършването на задачи.

В тази статия ще ви покажем как да създадете лентата за напредъка в Bash.

Ще започнем като ви изброим необходимите стъпки за създаването на лентата за прогреса:

Определете максималната стойност на лентата за прогреса – това ще излезе от продължителността на задачата, която трябва да бъде измерена.

Създайте функция, която ще изчисли процента на завършеност на задачата.

Извършете изчисленията и изпечатайте лентата за прогреса върху екрана.

Това е най-основната рамка за създаване на лентата за прогреса, но ще ви дадем и няколко примера, които да може да последвате, за да го направите по-лесно.

Пример 1:

В този пример ще използваме функция print_progress(), която ще приеме два аргумента: текущото състояние на лентата за напредъка и максималното състояние на лентата за напредъка.

#!/bin/bash

print_progress() {
    current_status="$1"
    max_status="$2"
    percentage=$((current_status * 100 / max_status))
    echo -ne "Progress: $percentage% \r"
}

# Тест
for i in {1..100}
do
    sleep 0.1
    print_progress "$i" 100
done

Тук ще броят от 1 до 100 и подаваме i като текущо състояние на лентата за напредъка и максималното състояние на лентата за напредъка е 100. Функцията print_progress() ще изчисли процента на завършеност на задачата, като я повишава на всеки глед от 100 – т.е. на всеки глед ще увеличава стойността и спрямо това, коя стъпка е, ще променя лентата за напредъка.

Пример 2:

В този пример ще използваме инструментите tput и printf, за да покажем лентата за напредъка на определени позиции в терминала.

#!/bin/bash

PROGRESS_BAR_WIDTH=80

for i in {1..100}
do
    percent=$((i * 100 / 100))
    bar=$(seq -s "─" $(($i/2)) | sed 's/[0-9]//g')
    printf "[ %-${PROGRESS_BAR_WIDTH}s ] ${percent}%% \r" "${bar}"
done

В този пример използваме PROGRESS_BAR_WIDTH, което е ширина на лентата за напредъка. С помощта на на seq и sed използваме код, за да построим лентата за напредъка. С функцията printf изпринтваме бара. В последния ред ще се отпечата процента на завършеност.

Пример 3:

Друг начин за внедряване на лента за напредък в Bash е използването на командата dialog

Тази команда може да се използва за показване на добре изглеждаща лента за прогрес в терминала.

Тази лента за прогрес не е инсталирана в системата по подразбиране. Изпълнете следната команда, за да инсталирате тази лента за напредък в системата:

sudo apt-get update -y
sudo apt install dialog

Описание на пакета

Това приложение предоставя метод за показване на няколко различни типа диалогови прозорци от шел скриптове.
Показва удобни за потребителя диалогови прозорци от шел скриптове.

лентата за прогреса-напредъка в Bash

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: