barras de progresso em scripts bash

Enquanto muitos de nós sempre pensamos em uma maneira mais fácil de rastrear uma operação a ser concluída. Bem, existem muitas ferramentas por aí que podem ajudá-lo a fazer esse curl, pip, apt são alguns exemplos comuns das ferramentas que exibirão uma barra de progresso extravagante para que você saiba onde está a operação no momento.

A vida geralmente se torna difícil quando se trata de scripts de shell, loops, condições e execuções de comando, especialmente. Vamos entender o que precisamos e então veremos alguns exemplos.

A necessidade:
a. Algo que leva / calcula não de tarefas.
b. Algo que exibe tarefas concluídas e pendentes.
c. Algo que exibe o percentil de conclusão ou eta.
d. Algo que parece muito além de #a a #d

Vamos tentar algo.

#!/bin/bash

# code is color code of the bar.
code
=15

# function to calculate percentile completion
calcPer
()
{
# declare a variable to count on
local c=$1
# calculate percentile
per
=$(echo "scale=2;$c / $n * 100"|bc -l)
}

# start loop
# n=no of tasks
# So, if you are processing a file n=no of lines in that file.
#
while [ $n -ge $i ]; do
calcPer $i

# call a small sleep to let people see the beauty of progress bar in action.
sleep
.5
# print the color every time a task is done.
printf
"|\e[48;5;${code}m%${per%.*}s\e[31m${per%.*}"
# make room for more, so escape the return.
printf
'%s\e[0m%s\r' "%" "|"
# finally increament the counter for the next task in pipeline.
echo $
((i+=1)) >/dev/null
done
printf
'\n'

Agora vamos verificar o resultado:
resultado