Barra de progresso

Publicado por Roger Pereira Boff 10/01/2009 (última atualização em 25/10/2010)

[ Hits: 18.013 ]

Homepage: http://rogerboff.wordpress.com

Download progressbar.sh

Download 1286726480.ProgressBar.sh (versão 2)




Script para geração de barra de progresso de uso geral. Baseado no script do gauge.sh do Aurélio M. Jargas.

  



Versões atualizadas deste script

Versão 2 - Enviado por Roger Pereira Boff em 10/10/2010

Changelog: - Alterado "{FONTE}" para "{VDESC}".
- Alterado "#!/bin/bash" para "#!/usr/bin/env bash" para ficar compatível com outras distribuições Linux

Download 1286726480.ProgressBar.sh


Esconder código-fonte

#!/bin/bash
# progressbar
#
# INFORMAÇÕES: www.shellscripts.com.br/script/progressbar
# NASCIMENTO : 23 de outubro de 2008
# AUTORES    : Roger Pereira Boff < rogerboff (@) gmail com>
# DESCRIÇÃO  : Função para geração de barra de progresso.
# LICENÇA    : GPL v2
# CHANGELOG  : www.shellscripts.com.br/script/progressbar/changelog
# VERSÂO     : 0.8.9
#
##############################################################################
# Este script é baseado no script gauge.sh de Aurélio Marinho Jargas
##############################################################################
# Habilitado o modo restrito de saída para qualquer comando que retorne qual-
# quer valor diferente de "0"
set -e

# Função para geração de barra de progresso.
#
# Exemplo:
#   [#########################.........................]  50%
#   Registro(s) processado(s): 50 de 100."
#
# Exemplo de uso:
#   ProgressBar "TotalDeRegistro"
ProgressBar()
{
   # Verifica se a barra de progresso já foi criada.
   if [ -z "$PBAR" ];
   then

      # Total de registros a serem processados.
      PBTOTAL="$1"

      # Tamanho da string $PBTOTAL
      PBTOTALTAM="${#PBTOTAL}"

      # String com espaço reservado para 1.000.000.000 de registros.
      PBSTR="           de $PBTOTAL."

      # Cria a barra de progresso e o total de registros processados.
      echo "[..................................................]    %"
      echo "Registro(s) processado(s): ${PBSTR:$((10-$PBTOTALTAM))}"

      # Move o cursor para a coluna 59 e  2 linhas acima..
      echo -en "{FONTE}33[59G{FONTE}33[2A"

      # Seta que a barra de progresso já foi criada.
      PBAR="true"

   fi

   ######################### Imprime a porcentagem no final da barra ###########################################################

   # Adiciona 1 registro processado.
   PBREG=$((PBREG+1))

   # Calcula a porcentagem de registros processados
   PBPORC=$((PBREG*100/PBTOTAL))

   # Move o cursor para a coluna 56 da barra de progresso.
   echo -en "{FONTE}33[$((57-${#PBPORC}))G$PBPORC{FONTE}33[59G"

   ######################### Imprime o andamento na barra de progresso #########################################################

   # Recupera a posição anterior da barra de progresso.
   PBBARPOSANT="${PBBARPOS:-1}"

   # Calcula a posição na barra de progresso.
   PBBARPOS=$((PBPORC/2+1))

   # Verifica se a posição é igual a "1".
   if [ "$PBBARPOS" = "1" ]; then PBBARPOS=$((PBBARPOS+1)); fi

   # Utilizado "for" para imprimir a barra nas possiveis lacunas geradas.
   for PBBARPOSFOR in $(seq $((PBBARPOSANT+1)) $PBBARPOS)
   do

      # Imprime o movimento na barra de progresso.
      echo -en "{FONTE}33[${PBBARPOSFOR}G#"

   done

   # Move o cursor para depois do sinal de porcentagem.
   echo -en ""

   ######################### Imprime o total de registros ######################################################################

   # Calcula a posição do cursor para o registro.
   PBREGPOS=$((28+$PBTOTALTAM-${#PBREG}))

   # Move o cursor para a coluna 28.
   echo -en "{FONTE}33[1B{FONTE}33[${PBREGPOS}G$PBREG{FONTE}33[59G{FONTE}33[1A"

   ######################## Finaliza com quebra de linha #######################################################################

   # Verifica se é o ultimo registro a ser processado.
   if [ "$PBTOTAL" = "$PBREG" ];
   then

      # Move o cursor para 1 linha abaixo
      echo -en "{FONTE}33[1B"

      # Quebra a linha para que linha de comando não fique no final da barra de progresso.
      echo ""

   fi
}

Scripts recomendados

Baixar pdf do "slide share" sem login usando shell script

Conversor de Dicionarios do Babylon

Ferramenta para o CBQ - parte 1

Atualização automática do Slackware

diMail - envia e-mail com um front do dialog


  

Comentários
[1] Comentário enviado por ChilesIT em 01/10/2010 - 10:29h

Legal........... mas aonde eu associo meu script a barra ?

[2] Comentário enviado por /bin/laden em 01/10/2010 - 13:50h

Também ache uma implementação da famosa "spinning bar" (barra giratória): http://slackbr.org/forum/viewtopic.php?f=45&t=17514

[3] Comentário enviado por nickmarinho em 03/10/2010 - 20:26h

Achei muito interessante, mas como usar ?

[4] Comentário enviado por Daemonio em 06/10/2010 - 08:43h

@ChilesIT
@nickmarinho

Ele criou uma função que poderá ser usada em seus scripts. Vocês terão que passar o valor total da barra como parâmetro.
(ex: para espiar o progesso de cópia de um arquivo, esse valor seria o tamanho total do arquivo).

Depois disso, é feita chamadas consecutivas a função (só que agora o parâmetro é ignorado) para a função incrementar o progresso em 1 e mostrar a porcentagem correspondente na tela.

Eu testei assim:

for i in {1..10}
do
Progress 10
sleep 1
done

Acho que é isso. O dono do script deve explicar melhor.
t+

[5] Comentário enviado por rogerboff em 10/10/2010 - 13:08h

Caros colegas.
Desculpem a demora para responder, mas fazia um tempo que não olhava meus e-mails particulares por falta de tempo (motivos profissionais que estão usurpando todo o meu tempo que estou acordado) e não tinha visto que esse script tinha sido publicado e que existiam algumas dúvidas sobre ele.

Vamos ao que interessa, esse script está com um bug (um bugizinho como fala meu chefe...), pois "{FONTE}" deveria ser "{COMENTARIO}". Pode ser corrigido facilmente alterando esse erro grotesco.

Para utilizar ele é simples, basta chamar a função "ProgressBar" com a quantidade de processamento que será feito pelo seu script.

Exemplo:

source ProgressBar.sh

i=0
while test $i -lt 1000
do

# Na primeira execução da função, ela irá guardar o total de registros
# que serão processados, ignorando posteriormente o valor da variável
# $1 que foi utilizado para chamar a função

# Informa a função que serão processados 1000 registros
ProgressBar "1000"
i=$((i+1))
done

# Limpa as variáveis utilizadas pela função ProgressBar
unset PBAR PBBARPOS PBBARPOSANT PBPORC PBREG PBREGPOS PBSTR PBTOTAL PBTOTALTAM

i=0
while test $i -lt 10000
do
# Informa a função que serão processados 10000 registros
ProgressBar "10000"
i=$((i+1))
done

Ao chamar a função ProgressBar, ele irá guardar o total de registros, sendo que a chamadas posteriores, ele irá somente acrescer o valor.

Abraços

Obs. Enviei uma versão corrigida do script, espero que logo seja publicada.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts