Opa!!

TEm um programinha em shell muito bom aqui sobre progress bar:

http://www.theiling.de/projects/bar.html#examples

[]s

Vinny

Julio Cezar Neves - DATAPREVRJ wrote:

> Olá Pessoal,
> aí vai uma proposta de barra de progresso que desenvolvi para atender 
> a uma
> transmissão que eu tinha o tempo estimado. Se fizer as devidas adaptações
> para o progresso ser medido pelo volume de dados já transmitido (umas 
> 4 ou 5
> alterações e não mais que isso), creio que o gauge ficará legal.
>
> Programa propriamente dito (que eu chamei de spin.sh):
>
> #!/bin/sh
> #======================================================================
> # Leia: Linux - Programacao Shell  ISBN: 85-7452-048-9
> # Autor: Julio Cezar Neves <mailto:[EMAIL PROTECTED]>
> #======================================================================
>
> if  [ $# -lt 3 ]
> then
>     echo "
>     Uso: `basename $0` <PID do proc. em background> <No. da Lin.> <No. da
> Col.> [Tempo previsto p/ execucao]
> "
>     exit 1
> fi
> [ $4 ] && Tp=$4
> Pon='\|/--\|/--'
> Lin1=$2
> Col1=$3
> Lin2=`expr $Lin1 + 1`
> Lin3=`expr $Lin1 + 2`
> Lin4=`expr $Lin1 + 3`
> Lin5=`expr $Lin1 + 4`
> Lin6=`expr $Lin1 + 5`
> Col2=`expr $Col1 + 1`
> Col3=`expr $Col1 + 2`
> Col4=`expr $Col1 + 3`
> Col5=`expr $Col1 + 4`
> i=0
> Decorr=0
> tput cup $Lin1 $Col1
> echo '+-----+'
> tput cup $Lin2 $Col1
> echo '|     |'
> tput cup $Lin3 $Col1
> echo '|  +  |'
> tput cup $Lin4 $Col1
> echo '|     |'
> tput cup $Lin5 $Col1
> echo '+-----+'
> tput cup $Lin6 $Col1
> echo 'AGUARDE'
>
> while kill -0 $1 2> /dev/null
> do
>     i=`expr $i % 8 + 1`
>     case $i in
>         1)  tput cup $Lin3 $Col2
>             echo "  "
>             tput cup $Lin2 $Col3
>             echo `echo $Pon | cut -c1`
>             ;;
>         2)  tput cup $Lin2 $Col3
>             echo " "
>             tput cup $Lin2 $Col4
>             echo `echo $Pon | cut -c2`
>             ;;
>         3)  tput cup $Lin2 $Col4
>             echo " "
>             tput cup $Lin2 $Col5
>             echo `echo $Pon | cut -c3`
>             ;;
>         4)  tput cup $Lin2 $Col5
>             echo " "
>             tput cup $Lin3 $Col5
>             echo `echo $Pon | cut -c4,5`
>             ;;
>         5)  tput cup $Lin3 $Col5
>             echo "  "
>             tput cup $Lin4 $Col5
>             echo `echo $Pon | cut -c6`
>             ;;
>         6)  tput cup $Lin4 $Col5
>             echo " "
>             tput cup $Lin4 $Col4
>             echo `echo $Pon | cut -c7`
>             ;;
>         7)  tput cup $Lin4 $Col4
>             echo " "
>             tput cup $Lin4 $Col3
>             echo `echo $Pon | cut -c8`
>             ;;
>         8)  tput cup $Lin4 $Col3
>             echo " "
>             tput cup $Lin3 $Col2
>             echo `echo $Pon | cut -c9,10`
>             ;;
>     esac
>     sleep 1
>     if  [ $Tp ]
>     then
>           Decorr=`expr $Decorr + 1`
>           Perc=`expr $Decorr \* 100 / $Tp`
>           [ $Perc -ge 100 ] && Perc=99
>           [ $Perc -lt 10 ] && Perc=0$Perc
>           tput cup $Lin6 $Col1
>           echo "+-$Perc%-+"
>     fi
> done
> for i in 1 2 3 4 5 6
> do
>       eval tput cup \$Lin$i $Col1
>       echo "       "
> done
>
> Um programinha para testar o spin.sh:
>
> clear
> sleep 30 &
> spin.sh $! 13 43 30
>
> Feliz Natal a todos.
> Julio Cezar Neves
> Tel:+55 21 2555-6148 / +55 21 8112-9988
> Fax: +55 21 2528-7646
> http://www.julioneves.com
> echo 
> 34307180195193995785843441489462450726966798683294575682968973834P | dc
>
>
> | -----Mensagem original-----
> | De: Fabricio Lopes de Souza [mailto:[EMAIL PROTECTED]
> | Enviada em: sexta-feira, 23 de dezembro de 2005 09:28
> | Para: [email protected]
> | Assunto: Re: [shell-script] Progress bar
> |
> |
> | bom brigado pela indicacao do comando , consegui fazer isso , acho que
> | ficou legalzinho
> |
> | //------------------------------------------------------------
> | -----------------
> | #!/bin/bash
> |
> | clear
> | read -p "Qual o tamanho do arquivo ? [ em KB ] : " size
> | read -p "Qual o nome do arquivo? : " name
> |
> | > $name
> | echo "Sarting ..."
> | echo ""
> | echo -n "  |#"
> | verbose=$(expr $size / 100 )
> | verbose2=$(expr $size % 100 )
> | cols=$(tput cols)
> | lines=$(tput lines)
> | count=4
> | value=0
> | for i in $(seq 1 $size) ; do
> |    cat aaa >> $name
> | if [ $i -eq $(expr $value + $verbose ) -a $(expr ${count} -
> | 4) -ne 99 ] ; then
> |       value=$i
> |       tput cup 4 ${count}
> |       ((count++))
> |       echo -n "#"
> |       tput cup 4 $( expr $cols - 32 )
> |       echo $(expr $count - 4 )%
> | fi
> | done
> | tput cup 4 $( expr $cols - 32 )
> | echo 100%
> | tput cup 4 ${count}
> | echo "#|"
> | //------------------------------------------------------------
> | -----------------
> |
> | On 12/21/05, Jorge Pereira <[EMAIL PROTECTED]> wrote:
> | > procure por "tput"
> | >
> | > man tput
> | >
> | > []'s
> | >
> | > Em 20/12/05, Fabricio Lopes de Souza
> | <[EMAIL PROTECTED]> escreveu:
> | > >
> | > >  Obrigado , vou dar uma trabalhada em cima deles e posto
> | aqui o resultado
> | > > so outra  duvida , nao tem como sobrescrever um caractere
> | na tela ???
> | > > exemplo , no fim da tela tem um contador que vai crescendo ....
> | > >
> | > > On 12/20/05, Reinaldo Marques de Lima
> | <[EMAIL PROTECTED]> wrote:
> | > > >
> | > > > tenho tres exemplos que consegui não sei onde, espero
> | que te ajude...
> | > > >
> | > > >
> | > >
> | #.............................................................
> | ..............................................................
> | ...........#
> | > > >
> | > > > Gerando barra de Progresso
> | > > > ##########################
> | > > > #só com shell:
> | > > > t=0;echo -n " 0 ";while [ $t -lt 100 ];do t=$[t+1];\
> | > > > echo -ne "\e[${#t}D#$t";sleep 1;done
> | > > > #idem:
> | > > > t=0;echo -en "                                         
> |         100\r 0
> | > > ";\
> | > > > while [ $t -lt 100 ];do t=$[t+1];[ $[ $t%2 ] -eq 0 ]&&\
> | > > > echo -ne "\e[${#t}D#$t";sleep 1;done;echo
> | > > > #+1:
> | > > > t=0;while [ $t -lt 100 ];do echo -ne "\r  0";x=0;while
> | [ $x -lt 100 ];do
> | > > \
> | > > > [ $[$x%2] -eq 0 ]&& { echo -ne "\e[7m";[ $x -gt $t ] &&echo -en
> | > > "\e[0m";\
> | > > > echo -n " ";};x=$[x+1];done;echo -n 100%;sleep
> | 1;t=$[t+1];done;echo
> | > > > #com dialog:
> | > > > t=0;while [ $t -lt 100 ];do t=$[t+1];echo $t;sleep .3;done\
> | > > > |dialog --gauge "Barra de Progresso com dialog" 10 72
> | > > >
> | > > >
> | > >
> | #.............................................................
> | ..............................................................
> | ............#
> | > > >
> | > > > []'s
> | > > >
> | > > > echo
> | > >
> | 18180515279845107808937806642962434913546004933007135067247685
> | 35179018P
> | > > > | dc
> | > > >
> | > > >
> | > > >
> | > > >
> | > > > >From: Fabricio Lopes de Souza <[EMAIL PROTECTED]>
> | > > > >Reply-To: [email protected]
> | > > > >To: [email protected]
> | > > > >Subject: [shell-script] Progress bar
> | > > > >Date: Mon, 19 Dec 2005 11:53:42 -0200
> | > > > >
> | > > > >Estou tentando fazer uma barrinha que mostre +- o
> | quanto foi executado
> | > > > >do processo e talz.
> | > > > >Algumas duvidas surgiram :
> | > > > >Eh possivel de alguma forma o script conseguir ler o
> | conteudo de
> | > > > >COLLUMNS sem ter que exportar ?
> | > > > >A algum outro jeito de fazer essa barra ?
> | > > > >
> | > > > >ta ai o meu teste
> | > > > >Script meramente ilustrativo :)
> | > > > >[code]
> | > > > >#!/bin/bash
> | > > > >
> | > > > >[ $COLUMNS ] || {
> | > > > >    echo Você precisa exportar a variável \"COLUMNS\":
> | > > > >       echo "Tente \"export COLUMNS\" e tente executar
> | novamente"
> | > > > >          exit 1
> | > > > >          }
> | > > > >
> | > > > >read -p "Qual o tamanho do arquivo ? [ em KB ] : " size
> | > > > >read -p "Qual o nome do arquivo? : " name
> | > > > >
> | > > > > > $name
> | > > > >echo -n "|="
> | > > > >verbose=$(expr $size / $COLUMNS )
> | > > > >flag_B=0
> | > > > >for i in $(seq 1 $size) ; do
> | > > > >    if [ $flag_B -eq 0 ] ; then
> | > > > >       flag_A=$i
> | > > > >       flag_B=1
> | > > > >    fi
> | > > > >temp=$(expr $flag_A + $verbose)
> | > > > >    if [ $i -eq $temp ] ; then
> | > > > >       echo -n "="
> | > > > >       flag_B=0
> | > > > >    fi
> | > > > >    cat a >> $name
> | > > > >
> | > > > >done
> | > > > >    echo -n "|"
> | > > > >    echo ""
> | > > > >echo "DONE!"
> | > > > >[/code]
> | > > > >
> | > > > >explicando
> | > > > >Primeiro se exporta COLUMNS para sabermos o tamanho do terminal
> | > > > >Depois pegamos o tamanho do arquivo que se quer , seguindo do
> | > > > >pressuposto que o arquivo "a" tem 1KB . Tamanho do
> | Arquivo ($size) /
> | > > > >Colunas ($COLUMNS) = Intervalo ($verbose)  , ou seja a
> | cada intervalo
> | > > > >devera aparecer um caracter .
> | > > > >
> | > > > >Espero que fui claro ...
> | > > > >
> | > > > >Abracos :)
> | > > >
> | > > >
> | > > >
> | > > >
> | > > >
> | ---------------------------------------------------------------------
> | > > > Esta lista não admite a abordagem de outras liguagens
> | de programação,
> | > > como perl, C etc. Quem insistir em não seguir esta regra
> | será moderado sem
> | > > prévio aviso.
> | > > >
> | ---------------------------------------------------------------------
> | > > > Sair da lista: [EMAIL PROTECTED]
> | > > >
> | ---------------------------------------------------------------------
> | > > > Esta lista é moderada de acordo com o previsto em
> | > > http://www.listas-discussao.cjb.net
> | > > >
> | ---------------------------------------------------------------------
> | > > >
> | > > > Links do Yahoo! Grupos
> | > > >
> | > > >
> | > > >
> | > > >
> | > > >
> | > > >
> | > > >
> | > > >
> | > >
> | > >
> | > > 
> | ---------------------------------------------------------------------
> | > > Esta lista não admite a abordagem de outras liguagens de
> | programação, como
> | > > perl, C etc. Quem insistir em não seguir esta regra será
> | moderado sem prévio
> | > > aviso.
> | > >
> | ---------------------------------------------------------------------
> | > > Sair da lista: [EMAIL PROTECTED]
> | > >
> | ---------------------------------------------------------------------
> | > > Esta lista é moderada de acordo com o previsto em
> | > > http://www.listas-discussao.cjb.net
> | > >
> | ---------------------------------------------------------------------
> | > >
> | > >
> | > >
> | > >  *Yahoo! Grupos, um serviço oferecido por:*  PUBLICIDADE
> | > >
> | <http://br.rd.yahoo.com/SIG=12fcsgeip/M=386470.7632849.8508174
> | .2369893/D=brclubs/S=2137111254:HM/Y=BR/EXP=1135112596/A=31357
> | 88/R=2/id=noscript/SIG=12c39trgo/*http://ad.br.doubleclick.net
> | /clk;22846485;12120066;a?http://www.hoteis.com>
> | > > ------------------------------
> | > > *Links do Yahoo! Grupos*
> | > >
> | > >    - Para visitar o site do seu grupo na web, acesse:
> | > >    http://br.groups.yahoo.com/group/shell-script/
> | > >
> | > >    - Para sair deste grupo, envie um e-mail para:
> | > >   
> | [EMAIL PROTECTED]<shell-script-unsub
> | [EMAIL PROTECTED]>
> | > >
> | > >    - O uso que você faz do Yahoo! Grupos está sujeito aos
> | Termos do
> | > >    Serviço do Yahoo! <http://br.yahoo.com/info/utos.html>.
> | > >
> | > >
> | >
> | >
> | > --
> | > Regards,
> | > Jorge Pereira, From: Olinda/Pe/Brazil
> | > Home:  http://www.jorgepereira.com.br/
> | > E-mail:  [EMAIL PROTECTED], [EMAIL PROTECTED]
> | > Mobile: +55 (81) 8833-2484
> | > "Se você ama alguma coisa, liberte-a;
> | > Se ela não voltar a ti, cace-a e mate-a."
> | >
> | >
> | > [As partes desta mensagem que não continham texto foram removidas]
> | >
> | >
> | >
> | >
> | ---------------------------------------------------------------------
> | > Esta lista não admite a abordagem de outras liguagens de
> | programação, como perl, C etc. Quem insistir em não seguir
> | esta regra será moderado sem prévio aviso.
> | >
> | ---------------------------------------------------------------------
> | > Sair da lista: [EMAIL PROTECTED]
> | >
> | ---------------------------------------------------------------------
> | > Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> > ---------------------------------------------------------------------
> >
> > Links do Yahoo! Grupos
> >
> >
> >
> >
> >
> >
> >
> >
> >
>
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem 
> prévio
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: [EMAIL PROTECTED]
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
>
> Links do Yahoo! Grupos
>
>
>
>
>
>
>
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, 
> como perl, C etc. Quem insistir em não seguir esta regra será moderado 
> sem prévio aviso.
> ---------------------------------------------------------------------
> Sair da lista: [EMAIL PROTECTED]
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
>
>
>
> *Yahoo! Grupos, um serviço oferecido por:*
> PUBLICIDADE
>
>
> ------------------------------------------------------------------------
> *Links do Yahoo! Grupos*
>
>     * Para visitar o site do seu grupo na web, acesse:
>       http://br.groups.yahoo.com/group/shell-script/
>        
>     * Para sair deste grupo, envie um e-mail para:
>       [EMAIL PROTECTED]
>       <mailto:[EMAIL PROTECTED]>
>        
>     * O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
>       Serviço do Yahoo! <http://br.yahoo.com/info/utos.html>.
>
>



---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a