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 --------------------------------------------------------------------- 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
