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
