shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: RES: [shell-script] Progress bar


From: SuSE List
Subject: Re: RES: [shell-script] Progress bar
Date: Mon, 26 Dec 2005 18:24:07 -0200
User-agent: Mozilla Thunderbird 1.0.7 (Windows/20050923)

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:address@hidden>
#======================================================================

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:address@hidden]
| Enviada em: sexta-feira, 23 de dezembro de 2005 09:28
| Para: address@hidden
| 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 <address@hidden> wrote:
| > procure por "tput"
| >
| > man tput
| >
| > []'s
| >
| > Em 20/12/05, Fabricio Lopes de Souza
| <address@hidden> 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
| <address@hidden> 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 <address@hidden>
| > > > >Reply-To: address@hidden
| > > > >To: address@hidden
| > > > >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: address@hidden
| > > >
| ---------------------------------------------------------------------
| > > > 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: address@hidden
| > >
| ---------------------------------------------------------------------
| > > 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:
| > > | address@hidden<shell-script-unsub
| address@hidden?subject=Unsubscribe>
| > >
| > >    - 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:  address@hidden, address@hidden
| > 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: address@hidden
| >
| ---------------------------------------------------------------------
| > 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: address@hidden
---------------------------------------------------------------------
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: address@hidden
---------------------------------------------------------------------
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:
      address@hidden
      <mailto:address@hidden?subject=Unsubscribe>
* O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
      Serviço do Yahoo! <http://br.yahoo.com/info/utos.html>.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]